最终目的是为以下数组中的每个名称获取一个。(类似于下面代码片段底部注释掉的行)
如果有同名,则只取数量最多的,如果有重复,则只取版本较高的。
我尝试使用map、reduce的组合。请帮我解决这个问题。
//Original array
var arr = [
{'name': 'b', 'version': '103', 'count': 10},
{'name': 'a', 'version': '0.1b', 'count': 73},
{'name': 'b', 'version': '109', 'count': 67},
{'name': 'a', 'version': '1.0.3', 'count': 100},
{'name': 'a', 'version': '2.1.0', 'count': 100},
{'name': 'c', 'version': 'a103', 'count': 30},
{'name': 'c', 'version': 'a111', 'count': 100}
];
//expected console output
// { name: 'a', version: '2.1.0', count: 100 }
// { name: 'b', version: '109', count: 67 }
// { name: 'c', version: 'a111', count: 100 }
首先,作为该过程的“一部分”,我尝试从数组中获取“a”。
var filteredArr = arr.filter(item => item.name === 'a');
var m = Math.max(...(filteredArr.map(({count}) => count))),
maxes = arr.map(({count}) => count).reduce((p,c,i,a) => c == m ? p.concat(i) : p,[]);
console.log(maxes);
我期望从上面得到 [3, 4],但它打印出 [3, 4, 6]。
=====
附加问题:
我该如何处理这另一个原始的预期。
//Another original array.
var arr2 = [
{ name: 'a', version: '0.1', count: 1 },
{ name: 'b', version: '216', count: 1 },
{ name: 'b', version: '209', count: 1 },
{ name: 'b', version: '216', count: 1 },
{ name: 'b', version: '216', count: 1 },
{ name: 'b', version: '213', count: 1 },
{ name: 'b', version: '213', count: 1 },
{ name: 'b', version: '209', count: 1 },
{ name: 'b', version: '216', count: 1 },
{ name: 'b', version: '216', count: 1 }
];
//expected output
// { name: 'a', version: '0.1', count: 1 },
// { name: 'b', version: '216', count: 5 },
// { name: 'b', version: '209', count: 2 },
// { name: 'b', version: '213', count: 2 }
弑天下
幕布斯6054654
相关分类