搜索

首页  >  问答  >  正文

JavaScript如何把两个数组合并成一个数组(如果一个属性相同,把第二个数组中的项加入第一个数组);(比较绕直接看代码吧)

    var obj1 = [
        {index: 1,name: "权限1"},
        {index: 2,name: "权限2"},
        {index: 3,name: "权限3"},
        ];
    
    
    var obj2 = [
        {category: "权限1",index: 1,tag: "权限1-1"},
        {category: "权限2",index: 2,tag: "权限2-2"},
        {category: "权限3",index: 3,tag: "权限3-3"},
        {category: "权限1",index: 4,tag: "权限1-1"},
        {category: "权限2",index: 5,tag: "权限2-2"},
        {category: "权限3",index: 6,tag: "权限2-2"},
        ];
        

    var newObj = [
        {index: 1,name: "权限1",arr:[{tag:"权限1-1"},{tag:"权限1-1"}]},
        {index: 2,name: "权限2",arr:[{tag:"权限2-2"},{tag:"权限2-2"}]},
        {index: 3,name: "权限3",arr:[{tag:"权限3-3"},{tag:"权限3-3"}]},
        ];

有obj1和obj2两个数组,判断obj1的“name”和obj2的"category"值是否相同,如果相同就把obj2的“tag”属性放入obj1中形成数组。(说的比较饶,直接看结果的样子就好了)
最后能形成newobj的样子。(伸手党骂我吧,给个结果就行!)

巴扎黑巴扎黑2896 天前459

全部回复(2)我来回复

  • PHP中文网

    PHP中文网2017-04-10 17:02:36

    var newObj2 = [];
    for(var i=0 ; i < obj1.length; i++) {
        var nameO1 = obj1[i].name;
        var arr = [];
        for(var j=0; j < obj2.length ; j++) {
            var nameO2 = obj2[j].category;
            if(nameO1 === nameO2) {
                arr.push(obj2[j].tag);
            }
        }
        // clone obj
        var clonedObj = JSON.parse(JSON.stringify(obj1[i]))
        clonedObj.arr = arr;
        newObj2.push(clonedObj);
    }
    
    console.log(newObj2)

    回复
    0
  • ringa_lee

    ringa_lee2017-04-10 17:02:36

    你的newObj错了。index3的arr里面应该是3-3和2-2

    var obj1 = [
        {index: 1,name: "权限1"},
        {index: 2,name: "权限2"},
        {index: 3,name: "权限3"},
        ];
    
    
    var obj2 = [
        {category: "权限1",index: 1,tag: "权限1-1"},
        {category: "权限2",index: 2,tag: "权限2-2"},
        {category: "权限3",index: 3,tag: "权限3-3"},
        {category: "权限1",index: 4,tag: "权限1-1"},
        {category: "权限2",index: 5,tag: "权限2-2"},
        {category: "权限3",index: 6,tag: "权限2-2"},
        ];
    
    var t = {};
    
    obj1.forEach(function(v) {
        t[v.name] = [];
    });
    
    obj2.forEach(function(v) {
        if (v.category in t) {
            t[v.category].push(v.tag);
        }
    });
    
    obj1.forEach(function(v) {
        v["arr"] = t[v.name]
    });
    

    回复
    0
  • 取消回复