我的阵列很大,看起来像这样:
let arr = [{
'name': '1',
'val': '12'
},{
'name': '4',
'val': '52'
},
{
'name': '11',
'val': '15'
},
{
'name': '4',
'val': '33'
},
...]
我想找到所有具有相同name
值的对象,并将它们推入单独的数组中。
附言我不知道数组中可能有name
个值。
答案 0 :(得分:1)
您可以轻松按名称分组以获取所需的内容。下面是一个非常通用的功能,可以通过指定属性将对象的任何数组分组到Map。然后简单地使其成为数组就可以了
function group(arr, propertyToGroupBy) {
return arr.reduce(function(a, b) {
return a.set(b[propertyToGroupBy], (a.get(b[propertyToGroupBy]) || []).concat(b));
}, new Map);
}
const map = group(arr, 'name');
console.log(Array.from(map));
<script>
let arr = [{
'name': '1',
'val': '12'
}, {
'name': '4',
'val': '52'
},
{
'name': '11',
'val': '15'
},
{
'name': '4',
'val': '33'
}
];
</script>
答案 1 :(得分:0)
您可以在对象累加器中基于name
对数组进行分组。然后使用Object.values()
可以获取所有值。
let arr = [{ 'name': '1', 'val': '12' },{ 'name': '4', 'val': '52' }, { 'name': '11', 'val': '15' }, { 'name': '4', 'val': '33' }],
result = Object.values(arr.reduce((r,o) => {
r[o.name] = r[o.name] || [];
r[o.name].push(o);
return r;
},{}));
console.log(result);
答案 2 :(得分:0)
let arr=[{'name':'1','val':'12'},{'name':'4','val':'52'},{'name':'11','val':'15'},{'name':'4','val':'33'}];
let groups = arr.reduce((obj, el) => ({...obj, [el.name]: [...obj[el.name] || [], el] }), {});
console.log(groups);
答案 3 :(得分:0)
与x
分组,然后将输出映射为数组:
reduce