我在代码部分发布了一个数组,如下所示。我想要实现的是,以这样的方式处理该数组,它应该被分成 四个不同的数组,基于属性'value'的值。因此,对于该mainArray中具有相同属性“value”值的所有条目,它们都是 应该推入一个新阵列。
JavaScript中是否有任何方法或方法可以有效地完成该任务?
代码:
mainArray =
[ { key: '2', value: -20 },
{ key: '3', value: 0 },
{ key: '1', value: 10 },
{ key: '5', value: 10 },
{ key: '7', value: 10 },
{ key: '4', value: 40 },
{ key: '6', value: 40 },
{ key: '8', value: 40 } ]
代码2 :
[ { key: '2', value: -20 }] //array1
[{ key: '3', value: 0 }] //array2
[{ key: '1', value: 10 }, //array3
{ key: '5', value: 10 },
{ key: '7', value: 10 }]
[{ key: '4', value: 40 }, //array4
{ key: '6', value: 40 },
{ key: '8', value: 40 }]
答案 0 :(得分:3)
试试这个,
var a =
[ { key: '2', value: -20 },
{ key: '3', value: 0 },
{ key: '1', value: 10 },
{ key: '5', value: 10 },
{ key: '7', value: 10 },
{ key: '4', value: 40 },
{ key: '6', value: 40 },
{ key: '8', value: 40 } ]
var result = Object.values(a.reduce((acc, val)=>{
if(acc[val.value]){
acc[val.value].push(val)
} else{
acc[val.value] = [val]
}
return acc
},{}))
console.log(result)
答案 1 :(得分:0)
您可以使用lodash
's groupBy
function:
const grouped = _.groupBy(mainArray, 'value');
const results = [...Object.values(grouped)]
答案 2 :(得分:0)
如果您需要不同的数组,可以使用filter
函数。
mainArray = [
{ key: '2', value: -20 },
{ key: '3', value: 0 },
{ key: '1', value: 10 },
{ key: '5', value: 10 },
{ key: '7', value: 10 },
{ key: '4', value: 40 },
{ key: '6', value: 40 },
{ key: '8', value: 40 }
]
const array1 = mainArray.filter(a => a.value === -20)
const array2 = mainArray.filter(a => a.value === 0)
const array3 = mainArray.filter(a => a.value === 10)
const array4 = mainArray.filter(a => a.value === 40)
答案 3 :(得分:0)
从主数组中获取所有唯一值,然后使用filter获取匹配的数组
changes

答案 4 :(得分:0)
使用排序数组,您可以检查最后一个对象并推送一个空数组以获取更改的值。
var array = [{ key: '2', value: -20 }, { key: '3', value: 0 }, { key: '1', value: 10 }, { key: '5', value: 10 }, { key: '7', value: 10 }, { key: '4', value: 40 }, { key: '6', value: 40 }, { key: '8', value: 40 }],
grouped = array.reduce((r, o, i, a) => {
if (!a[i - 1] || a[i - 1].value !== o.value) {
r.push([]);
}
r[r.length - 1].push(o);
return r;
}, [])
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
或使用Map
。它也适用于未排序的数组。
var array = [{ key: '2', value: -20 }, { key: '3', value: 0 }, { key: '1', value: 10 }, { key: '5', value: 10 }, { key: '7', value: 10 }, { key: '4', value: 40 }, { key: '6', value: 40 }, { key: '8', value: 40 }],
grouped = Array.from(
array
.reduce((m, o) => m.set(o.value, [...m.get(o.value) || [], o]), new Map)
.values()
);
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }