繁体   English   中英

将新数组对象合并到现有对象js

[英]Merge new array objects to existing object js

我有这个javascript对象:

var countryArray = [{
 "country" : 'Indonesia',
 "state" : ['DKI','Bali'],
},
 {
 "country" : 'Malaysia',
 "state" : ['Penang','Johor'],
}];

var newArr = [{ "country" : 'Malaysia', "state" : ['Kelantan'] }]

如何合并或添加newArr到相关的CountryArray。

预期结果 :

var countryArray = [{
 "country" : 'Indonesia',
 "state" : ['DKI','Bali'],
},
 {
 "country" : 'Malaysia',
 "state" : ['Penang','Johor','Kelantan'],
}];

concat?

countryArray = countryArray.concat(newArr);

编辑好的,我知道,你想根据newArr中的内容更新countryArray的状态,不再更多:

EDIT2 concat,因为你想根据newArr中的内容添加countryArray的状态

   var countryArray = [{
     "country" : "Indonesia",
     "state" : ["DKI","Bali"],
    },
     {
     "country" : "Malaysia",
     "state" : ["Penang","Johor"],
    }];

    var newArr = [{ "country" : "Malaysia", "state" : ["Kelantan"] }];

    alert("Before while: " + countryArray[1]["state"]);
    var i=0;
    while(countryArray[i]) {
      var j=0;
      while(newArr[j]) {
        if(countryArray[i]["country"] == newArr[j]["country"]) {
          countryArray[i]["state"] = countryArray[i]["state"].concat(newArr[j]["state"]);
        }
        j++;
      }
      i++;
    }
    alert("After while: " + countryArray[1]["state"]);

基本上,您需要通过id合并对象JavaScript变体来合并数组值。

  1. 创建哈希表。
  2. 迭代两个数组并将数据存储在哈希表中,由ID索引。 如果已存在具有该ID的某些数据,请将其合并。
  3. 获取包含哈希映射值的数组。

 var countryArray = [{ "country" : 'Indonesia', "state" : ['DKI','Bali'], }, { "country" : 'Malaysia', "state" : ['Penang','Johor'], }]; var newArr = [{ "country" : 'Malaysia', "state" : ['Kelantan'] }]; function mergeById(objs, id) { var hash = new Map(); objs.forEach(function(obj) { var merged = hash.get(obj[id]) || {}; Object.keys(obj).forEach(function(key) { if (key === id) return merged[id] = obj[id]; if (!merged[key]) merged[key] = []; if (Array.isArray(obj[key])) [].push.apply(merged[key], obj[key]); else merged[key].push(obj[key]); }) hash.set(obj[id], merged) }); return Array.from(hash.values()); } console.log(mergeById(countryArray.concat(newArr), "country")); 

如果你想合并,有时你也需要拼接。 试试这个 :

var countryArray = [{
     "country" : "Indonesia",
     "state" : ["DKI","Bali"],
    },
     {
     "country" : "Malaysia",
     "state" : ["Penang","Johor"],
    }];

与传入的新数据合并;

 var newArr = [{ "country" : "Malaysia", "state" : ["Kelantan"] }];   

 MergeArray(countryArray,newArr);
 console.table(countryArray);

要拼接形成传入的数据;

var DelArray = [{ "country" : "Malaysia", "state" : ["Penang"] }];

SpliceArray(countryArray,DelArray);
console.table(countryArray);

和相关的功能;

function MergeArray(countryArray,newArr) {  
 var a = 0;
  $.each(newArr, function (key, data1) {
     var b = 0;
     $.each(countryArray, function (key, data2) { 

        if(data1.country == data2.country) { // match the same country

    countryArray[b]["state"] =  countryArray[b]["state"].concat(newArr[a]["state"]);

        }

    b++; });
  a++; });  
}

function SpliceArray(countryArray,DelArray) { 
    var a=0;
            $.each(DelArray, function (key, data1) { 
              var b=0;
              $.each(countryArray, function (key, data2) { 

                      if(data1.country == data2.country) {  // get same country    

                         console.log(countryArray[b]["state"]) //   ["Penang", "Johor", "Kelantan"]

                          for(var c=0; c < countryArray[b]["state"].length; c++){   // loop in countryArray state[]

                           console.log(DelArray[a]['state']); // to remove :  ["Penang"]

                              if(countryArray[b]["state"][c] == DelArray[a]['state'] ) {

                                 countryArray[b]["state"].splice(c,1); // remove ["Penang"]

                              }
                          }
                      }
              b++; 
              });
        a++;
        });

  } 

希望会有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM