我在表结构中有以下数组。我想为此计算相同的年龄,并将结果放入Javascript数组中。有人可以提示我如何做吗?
表格形式的数组
Name Country Age
lucy China 20
mark Japan 30
lili Korea 20
jack Japan 21
预期的数组表:
Age Count
20 2
21 1
30 1
在代码类型中:
[
['Age', 'Count']
['20', 2]
['21', 2]
['30', 1]
]
答案 0 :(得分:0)
slice
获得一个没有标题行的数组。 reduce
所得数组。 Object.entries()
获取键和计数值对。将[<column name>, "Count"]
添加到输出数组的开头这适用于数组的任何索引。
const input = [
["Name", "Country", "Age"],
["lucy", "China", 20],
["mark", "Japan", 30],
["lili", "Korea", 20],
["jack", "Japan", 21]]
function groupColumn(array, index) {
const merged = input.slice(1).reduce((acc, { [index]: value }) => {
acc[value] = acc[value] + 1 || 1;
return acc;
}, {});
const columnName = array[0][index];
return [[columnName, 'Count'], ...Object.entries(merged)]
}
console.log(JSON.stringify(groupColumn(input, 2))) // Age
console.log(JSON.stringify(groupColumn(input, 1))) // Country
答案 1 :(得分:0)
如果您的阵列看起来像那样,则可以使用以下解决方案。
var array1 = [['lucy','China',20], ['mark','Japan',30], ['lili','Korea',20], ['jack','Japan',21]]
var result = array1.map(x => x[2]).reduce(function (acc, curr) {
acc[curr] ? acc[curr]++ : acc[curr] = 1;
return acc
}, {});
console.log(result);
Array.prototype.map()创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。
Array.prototype.reduce() reduce()方法在数组的每个元素上执行reducer函数(由您提供),从而产生单个输出值。