Javascript 通过与另一个数组匹配来重写数组元素值

Javascript 通过与另一个数组匹配来重写数组元素值,javascript,arrays,indexof,Javascript,Arrays,Indexof,array1的父母有子女。array2在array1中几乎没有父母的其他子女。array1中的子项应替换为array2中的子项 阵列1: { "name": "USA", "id": "country: USA", "children": [ { "name": "chicago", "id": "country:USA>chicago" }, {

array1的父母有子女。array2在array1中几乎没有父母的其他子女。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]);
        }
    }
}
for(var j=0;j');
对于(var k=0;k-1){//找到了一个匹配项
数组1[k]。子类=[];
array1[k].children.push(array2[j]);
}
}
}

}

我建议为分组项构建一个带有键的临时对象,然后迭代
数组1
,如果
temp
对象中有属性
id
,则用新内容替换
子属性的内容

var array1=[{“名称”:“美国”,“id”:“国家:美国”,“儿童”:[{“名称”:“芝加哥”,“id”:“国家:美国>芝加哥”},{“名称”:“亚利桑那州”,“id”:“国家:美国>亚利桑那州”},{“名称”:“阿拉巴马州”,“id”:“国家:美国>阿拉巴马州”}},{“名称”:“xyz”,“id”:“国家:xyz”,“儿童”:[{“名称”:“名称”:“名称1”,“id”:“国家:xyz>名称1”},{“名称2”,“id”:“country:xyz>name2”},{“name”:“abc”,“id”:“country:abc”,“children”:[{“name”:“name1”,“id”:“country:abc>abc1”},{“name”:“name2”,“id”:“country:abc>abc2”}],
array2=[{“名称”:“名称3”,“id”:“国家:xyz>名称1”},{“名称”:“格鲁吉亚”,“id”:“国家:美国>格鲁吉亚”},{“名称”:“名称4”,“id”:“国家:xyz>名称4”});
函数f(){
var temp={};
array2.forEach(函数(a){
var key=/(国家:.*)>/i.exec(a.id)[1];
临时[钥匙]=临时[钥匙]| |[];
温度[键]。按下(a);
});
数组1.forEach(函数(a){
如果(温度中的a.id){
a、 儿童=临时工[a.id];
}
});
}
f();

document.write(''+JSON.stringify(array1,0,4)+'')
你能让你的数组更具可读性吗?也许能更详细地描述一下你给我们的代码中有什么不起作用?顺便说一句,你的数组似乎有一些复制/粘贴错误,因为有一半的双引号丢失了:D@Icepickle:我编辑了我的问题以使其更具可读性。我的代码的问题是我按原样取回了数组1然而,我希望array2在array1中找到它的父项。当它找到父项时,它应该用array2的数据替换array1的子项。希望我现在清楚了。当您选中
parentId==array1[k]。id
parentId='country:xyz'和array1[1].id='country:xyz'。请注意空格…@Ziki-空格是复制粘贴错误。谢谢Nina。非常优雅的解决方案。