關於陣列的遍歷方法,我們使用最多的應該就是foreach和map了,一些人可能知道這兩個方法除去效能差別,最大的不同就是返回值還是原陣列修改的問題,但是對更多的陣列方法可能並不是很了解,fliter和some, every等方法這裡就不講了,他們的使用方式都比較好理解,這篇文章主要講講最麻煩的reduce。
先來看看最簡單的用法,也是很多例項中使用的累加器手法:
>
let a =[1
,2,3
]undefined
>
let b = a.
reduce
((a,b)
=>a+b)
undefined
> b
6
我們拿這個例子簡單分析一下使用方法。
reduce接收兩個引數,乙個是函式引數,乙個是初始值,其中函式引數接收四個引數,後兩個和map的後兩個一樣是索引和陣列,前兩個分別為處理後的返回值和下乙個要處理的值。
對於上面的例子,我們並不存在初始值,所以初始值預設為陣列的第乙個值,即為1,則第一次呼叫時a為1,b為2,返回後第二次a即為1+2=3,這是b取到最後的3,則a為3+3=6,最後返回的值即迴圈結束後a的值。
上面的例子也可以寫為:
>
let a =[1
,2,3
]undefined
>
let b = a.
reduce
((a,b)
=>a+b,0)
undefined
> b
6
下面說幾個應用,上面這個例子已經是一類了,即作為累加或累乘。
> a[,
,]> a.
reduce
((t,v)
=>t+v.score*v.weight,0)
93
在a陣列中找到b陣列中不存在的值是一項挺常見的操作,使用reduce可以比較簡單的實現:
a1.
reduce
((t,v)
=>,[
])
當然使用逗號操作符可以更加簡單的完成:
a1.
reduce
((t,v)
=>
(!a2.
includes
(v)&&t.
push
(v), t),[
])
>
(console.
log(2)
,2)2
2
陣列扁平化是挺常見的面試題:
function
flat
(a)
之前用python的時候做去重很簡單,用集合包裹一下然後轉化為陣列即可,js之後不屑於這麼操作了。
a.
reduce
((t,v)
=>
(!t.
includes
(v)?t.
push
(v):
null
,t),
)
陣列拆解組合在有些地方是挺有用的:
function
unzip
(arr =
)).map
(v =>
));}
還是用逗號操作符簡化:
> a.
reduce
((t,v)
=>
(t[v]
=(t[v]||0
)+1, t)
,)
陣列基本上可以說是平常開發用的很多的資料結構,reduce方法其實是可以覆蓋大部分其他方法的,當然它的效能也不差,平時可以使用一手。 一文看懂kylin
kylin到底解決了什麼關鍵問題 要徹底的解決掉資料查詢時間隨著資料量的增長而成線性增長的規律 kylin適合哪類資料的處理 通常查詢資料,一般是統計結果,如果是統計結果,必然會按照維度來進行聚合,kylin的工作原理是多維立方體分析,適合需要從多個維度來觀察資料的查詢。維度,看資料的角度,比如地區...
一文看懂xml
先簡單介紹下html xml xpath 1.html 超文字語言,用來展示資料。2.xml 可擴充套件標記語言,用來傳輸資料。僅僅是純文字,標籤可自定義。3.xpath 專門在xml中查詢資訊的語言。xml 文件必須包含根元素。該元素是所有其他元素的父元素。xml 文件中的元素形成了一棵文件樹。這...
一文看懂條件編譯
條件編譯概述 就是在滿足一定的條件時才對源 進行編譯。條件編譯一般有3種形式 形式一 a ifdef 識別符號 識別符號定義時,執行程式段1,否則執行程式段2 程式段1 else 程式段2 endif b ifdef 識別符號 程式段1 endif 例如 define k 1 ifdef k pri...