对Javascript对象进行分组并插入自定义值

Grouping Javascript objects and inserting custom value

本文关键字:插入 自定义 Javascript 对象      更新时间:2023-09-26

我已经实现了以下

https://jsfiddle.net/f3syta4f/2/

function indexByColor (input) {
    var output = {};
    for (var i in input) {
        for (var j in input[i]) {
            var x = input[i][j];
            if (output[x.color] === undefined) output[x.color] = {
                color: x.color, 
                weight: [],
            };  
            output[x.color].weight.push(x.weight);
        };  
    };  
    return Object.keys(output).map(function(c){
            return output[c];
    });     
}; 
输入

dataSet[0]= [
    {color:"yellow",weight:12,key:0}
   ,{color:"red",weight:15,key,0}
];          
dataSet[1]= [
    {color:"yellow",weight:22,key:1}
   ,{color:"blue",weight:10,key:1}
];

电流输出

an[0]=[{color:"yellow",weight:[12,22]}]
an[1]=[{color:"red",weight:[15]}]
an[2]=[{color:"blue",weight:[10]}]

但是,如果该javascript对象数组中不存在data,则将其添加0。

期望输出值

an[0]=[{color:"yellow",weight:[12,22]}]
an[1]=[{color:"red",weight:[15,0]}]
an[2]=[{color:"blue",weight:[0,10]}]

进一步解释,data[1]具有blue的颜色,而data[0]没有,因此,weight=[0,10] ..0来自data[0], 10来自data[1]

这将为您工作:

function indexByColor (input) {
    var output = {};
    for (var i in input) {
        for (var j in input[i]) {
            var x = input[i][j];
            output[x.color] = {
                color: x.color, 
                weight: [],
            };  
        };  
    };  
    return Object.keys(output).map(function(c){
        for(var i in input) {
            var weight = 0;
            for(var j in input[i])
                if(input[i][j].color == c) {
                    weight = input[i][j].weight;
                    break;
                }
             output[c].weight.push(weight);
        }
        return output[c];
    });     
};  

(小提琴)

编辑:按评论要求…

第一部分只准备输出对象,使用输入结构中所有颜色的并集。

然后,在地图迭代中,检查每个第一级实例是否存在颜色,并且选择权重或将权重默认为0。然后将该值压入权重数组。