JS:计算数组中的元素 -> 返回数组的数组
JS: Counting Elements in Array -> Returning Array of Arrays
我有一个如下所示的数组:
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());
但是我想不通,如何创建这个包含数组的数组。
有人有想法吗?
你可以试试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);
Map
有一个 entries
方法,returns 一个 key-value 对的迭代器。如果需要数组,可以使用 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);
我有一个如下所示的数组:
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());
但是我想不通,如何创建这个包含数组的数组。
有人有想法吗?
你可以试试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);
Map
有一个 entries
方法,returns 一个 key-value 对的迭代器。如果需要数组,可以使用 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);