如何根据属性值包含的内容拆分数组的条目?

时间:2018-04-03 17:01:40

标签: javascript node.js

我在代码部分发布了一个数组,如下所示。我想要实现的是,以这样的方式处理该数组,它应该被分成 四个不同的数组,基于属性'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 }]

5 个答案:

答案 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; }