@zeni1agent

Как создать путь к элементу ассоциируемого массива(объекта) с возможностью редактирования?

У меня есть ассоциируемого массив(объект).
var test_array = {
  "things": {
    "equipment": {
      "car": {
        "id1": "00",
        "id2": "01"
      },
      "engine": {
        "id3": "02",
        "id4": "03"
      }
    },
    "organics": {
      "flor": {
        "id5": "04",
        "id6": "05"
      },
      "mushrooms": {
        "id7": "06",
        "id8": "07"
      }
    }
  }
};

И сохранены путь к элементу в виде массива.
var way = ['things','equipment','car']
И я хочу с помощью метода forEach добраться до элемента массива test_array
test_array['things']['equipment']['car']
Для дальнейшего редактирования. Добавления и удаления элементов.
Я пробовал так
array_clone2 = test_array; 
way.push($(this).attr("id")) 
way.forEach(function(element) {
array_clone2  = array_clone2[element];
});
console.log(array_clone2);

Но я понял что я создаю лишь копию массива и удалить какой либо элемент из основного не получится.
Есть ли у кого решение как это сделать?
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 2
FFxSquall
@FFxSquall
Могу писать код, могу не писать
var obj;
way.forEach( function (item) {
  obj = obj ? obj[item] : test_array[item];
})
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
Вы ошибаетесь, это не клон, а ссылка. И удалить получится.
Просто если вы дойдёте то строки или числа, то получите уже само значение, то есть копию. А объекты и массивы передаются по ссылке во время присваивания. Вывод: не доходите до строки/числа.
var way = ['things','equipment','car'];
//......
console.log('Было: ', test_array.things.equipment.car.id1); // "00"
array_clone2.id1 = 999;
console.log('Стало: ', test_array.things.equipment.car.id1); // 999

var way = ['things','equipment','car','id1'];
//......
console.log('Было: ', test_array.things.equipment.car.id1); // "00"
array_clone2 = 999;
console.log('Стало: ', test_array.things.equipment.car.id1); // "00"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы