JS:计算数组中的元素 - >返回数组

时间:2018-02-21 11:22:09

标签: javascript arrays typescript count reduce

我有一个看起来像这样的数组:

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());

但我无法弄明白,如何创建包含数组的数组。

有没有人有想法?

2 个答案:

答案 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);