我有一个看起来像这样的数组:
fruits = ['Apple', 'Apple', 'Peach', 'Apple', 'Banana', 'Pear', 'Apple', 'Banana', 'Peach'];
现在我正在尝试计算包含元素以获得如下所示的结果:
[
['Apple', 4],
['Peach', 2],
['Banana', 2],
['Pear', 1]
]
我能够将它缩小到地图。像这样:
fruits.reduce((acc, val) => acc.set(val, 1 + (acc.get(val) || 0)), new Map());
但我无法弄明白,如何创建包含数组的数组。
有没有人有想法?
答案 0 :(得分:1)
您可以尝试使用Object.entires()
方法。
fruits = ['Apple', 'Apple', 'Peach', 'Apple', 'Banana', 'Pear', 'Apple', 'Banana', 'Peach'];
var results = Object.entries(fruits.reduce((acc, val) => {
acc[val] = acc[val]+1 || 1;
return acc;
},{}));
console.log(results);

答案 1 :(得分:1)
Map
有一个entries
方法,它返回一个键值对的迭代器。如果需要数组,可以使用Array.from
:
const fruits = ['Apple', 'Apple', 'Peach', 'Apple', 'Banana', 'Pear', 'Apple', 'Banana', 'Peach'];
const fruitMap = fruits
.reduce((acc, val) => acc.set(val, 1 + (acc.get(val) || 0)), new Map());
// My preference because it's very clear what it does:
const fruitEntries = Array.from(fruitMap.entries());
// Other options:
/*
const fruitEntries = Array.from(fruitMap)
const fruitEntries = [...fruitMap];
*/
console.log(fruitEntries);