統計成單一 Object

實務上所有結果可能都是一層 Array,需要統計成有意義的 Object。

Version


ECMAScript 5

Imperative


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const data = [
'Angular',
'React',
'Vue',
'Vue',
'Angular',
'React',
'React',
'React',
'Vue',
];

let result = {};
for(let i = 0; i < data.length; i++) {
if (!result[data[i]]) result[data[i]] = 1;
else result[data[i]] += 1;
}

console.log(result);

data array 為投票結果,分別有 AngularReactVue,希望將結果統計為 object,key 分別為 AngularReactVue,而 value 為 票數

Functional


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const data = [
'Angular',
'React',
'Vue',
'Vue',
'Angular',
'React',
'React',
'React',
'Vue',
];

const reducer = (accm, item) => {
if (!accm[item]) accm[item] = 1;
else accm[item] += 1;

return accm;
};

const result = data.reduce(reducer, {});
console.log(result);

由於結果為 單一 object,因此也適用於 reduce()

data[i] 相當於 itemresult 相當於 accm,最後記得 return accm

group000

Conclusion


  • 只要需求為 單一 object,就適合使用 reduce()

Reference


egghead.io, Reduce an Array into a Single Object

2018-12-17