[英]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变体来合并数组值。
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.