array1 имеет родительский элемент с дочерними элементами. В массиве array2 осталось несколько других родителей. Array1 дети должны быть заменены на детей в массив2Переопределить значение элемента массива путем сопоставления с другим массивом javascript
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"
}
]
Результат:
[
{
"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"
}
]
}
]
Код, который я пробовал, но не работал. Проблема с моим кодом заключается в том, что я возвращаю массив1 как есть, тогда как я ожидаю, что array2 найдет его родительский элемент в массиве1. В тот момент, когда он находит родителя, он должен заменить дочерние элементы массива 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]);
}
}
}
}
Не могли бы вы сделать ваши массивы немного более удобным для чтения? И, может быть, более подробно описать, что не работает в коде, который вы нам дали? Кстати, у вашего массива есть некоторые ошибки копирования/вставки, так как половина двойных кавычек отсутствует: D – Icepickle
@Icepickle: Я отредактировал свой вопрос, чтобы сделать его более читаемым. Проблема с моим кодом заключается в том, что я возвращаю массив1 как есть тогда как я ожидаю, что массив2 найдет своего родителя в массиве1. В тот момент, когда он находит родителя, он должен заменить дочерние элементы массива array1 на данные массива. Надеюсь, теперь я ясно. – Mustang
Когда вы проверяете 'parentId == array1 [k] .id' parentId = 'страна: xyz' и array1 [1] .id = 'страна: xyz'. быть в курсе пространства ... – Ziki