通过与另一个数组javascript匹配来覆盖数组元素值
Override an array element value by matching with another array javascript
array1具有带子级的父级。array2中几乎没有父母的其他子女。array1子项应替换为array2 中的子项
阵列1:
{
"name": "USA",
"id": "country: USA",
"children": [
{
"name": "chicago",
"id": "country:USA>chicago"
},
{
"name": "arizona",
"id": "country:USA>arizona"
},
{
"name": "alabama",
"id": "country:USA>alabama"
}
]
},
{
"name": "xyz",
"id": "country:xyz",
"children": [
{
"name": "name1",
"id": "country:xyz>name1"
},
{
"name": "name2",
"id": "country:xyz>name2"
}
]
},
{
"name": "abc",
"id": "country:abc",
"children": [
{
"name": "name1",
"id": "country:abc>abc1"
},
{
"name": "name2",
"id": "country:abc>abc2"
}
]
}
阵列2:
[
{
"name": "name3",
"id": "country:xyz>name1"
},
{
"name": "georgia",
"id": "country:USA>georgia"
},
{
"name": "name4",
"id": "country:xyz>name4"
}
]
结果:
[
{
"name": "USA",
"id": "country:USA",
"children": [
{
"name": "georgia",
"id": "country:USA>georgia"
}
]
},
{
"name": "xyz",
"id": "country:xyz",
"children": [
{
"name": "name3",
"id": "country:xyz>name1"
},
{
"name": "name4",
"id": "country:xyz>name4"
}
]
},
{
"name": "abc",
"id": "country:abc",
"children": [
{
"name": "name1",
"id": "country:abc>abc1"
},
{
"name": "name2",
"id": "country:abc>abc2"
}
]
}
]
我尝试过但没有成功的代码。我的代码的问题是我按原样返回array1,而我希望array2在array1中找到它的父级。一旦找到父级,就应该用array2的数据替换array1的子级。
for (var j = 0; j < array2.length; j++) {
var parentId = array2[j].id.substr(0, array2[j].id.indexOf('>'));
for(var k=0; k < array1.length; k++){
if( parentId == array1[k].id){
if(array2[j].id.indexOf(array1[k].children.id) > -1){ //found a match
array1[k].children = [];
array1[k].children.push(array2[j]);
}
}
}
}
我建议为分组项构建一个带有键的临时对象,然后在array1
上迭代,如果属性id
在temp
对象中,则用新内容替换children
属性的内容。
var array1 = [{ "name": "USA", "id": "country:USA", "children": [{ "name": "chicago", "id": "country:USA>chicago" }, { "name": "arizona", "id": "country:USA>arizona" }, { "name": "alabama", "id": "country:USA>alabama" }] }, { "name": "xyz", "id": "country:xyz", "children": [{ "name": "name1", "id": "country:xyz>name1" }, { "name": "name2", "id": "country:xyz>name2" }] }, { "name": "abc", "id": "country:abc", "children": [{ "name": "name1", "id": "country:abc>abc1" }, { "name": "name2", "id": "country:abc>abc2" }] }],
array2 = [{ "name": "name3", "id": "country:xyz>name1" }, { "name": "georgia", "id": "country:USA>georgia" }, { "name": "name4", "id": "country:xyz>name4" }];
function f() {
var temp = {};
array2.forEach(function (a) {
var key = /(country:.*)>/i.exec(a.id)[1];
temp[key] = temp[key] || [];
temp[key].push(a);
});
array1.forEach(function (a) {
if (a.id in temp) {
a.children = temp[a.id];
}
});
}
f();
document.write('<pre>' + JSON.stringify(array1, 0, 4) + '</pre>');
相关文章:
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- Mongoose-在更新中删除数组元素
- javascript数组元素是否知道其封闭数组
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 如何在javascript中使用click函数选择数组元素
- 如何在JavaScript中剥离数组元素中的非整数
- 消隐数组元素是否生成自己的属性
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- 在Codrops的内容中添加数组元素展开缩略图网格预览
- 如何使用Jquery水平打印表中的数组元素,并在某个元素之后垂直打印
- 如何访问数组中的数组元素(JavaScript)
- 生成ACF标记位置的数组(元素列表后缺少])
- validate.js验证数组元素
- JavaScript Unshift EACH 数组元素
- 如何在加号运算符之后选择数组元素的一部分
- 访问标记图标的图像数组元素
- JavaScript 合并相同的数组元素
- 通过与另一个数组javascript匹配来覆盖数组元素值
- Array() 中的 getElementById() 正在覆盖数组中的其他元素