Recosh
@Recosh
Программист студент

Как записать в многомерный массив/объект по адресу?

Как записать данные в многомерный массив с объектами по адресу? Например, есть массив, адрес (по свойству key) и новые данные:

var data = [
	{key:'raz', cells:[{val: '1'},{val:'razoviy'}]},
	{key:'dva', cells:[{val: '2'},{val:'vtoroy'}],children:[
		{key:'poddva', cells:[{val: '2'},{val:'podvtoroy'}],children:
	  		[{key:'podpoddva', cells:[{val: '2'},{val:'podpodvtoroy'}]},{key:'raz', cells:[{val: '1'},{val:'raz'}]}]
	  	},
	    {key:'poddvadva', cells:[{val: '2'},{val:'podvtoroyvtoroy'}]}
	]},
	{key:'tri', cells:[{val: '3'},{val:'trtiy'}]}
]

var adres = ['dva','poddva','raz']

var newDataCells = [{val: '1.0'},{val:'raz raz, est svyaz'}]

Не знаю, как построить скрипт, чтобы по адресу записывать данные в эту переменную. Ну и также добавлять новые дочерние объекты...
  • Вопрос задан
  • 1709 просмотров
Решения вопроса 1
Recosh
@Recosh Автор вопроса
Программист студент
Решил задачу так:
var data = [
  {key:'raz', cells:[{val: '1'},{val:'razoviy'}]},
  {key:'dva', cells:[{val: '2'},{val:'vtoroy'}],children:[
    {key:'poddva', cells:[{val: '2'},{val:'podvtoroy'}],children:
    		[{key:'podpoddva', cells:[{val: '2'},{val:'podpodvtoroy'}]},{key:'raz', cells:[{val: '1'},{val:'raz'}]}]
    	},
      {key:'poddvadva', cells:[{val: '2'},{val:'podvtoroyvtoroy'}]}
  ]},
  {key:'tri', cells:[{val: '3'},{val:'trtiy'}]}
]

var adres = ['dva','poddva','raz']
var newDataCells = [{val: '1.0'},{val:'raz raz, est svyaz'}]
var lastMath
Object.traverse(data, function(node, value, key, path, depth) {
    if(typeof value == 'object' && value.key){
		let indexAdres = 0;
		if(depth > 0)
			indexAdres = depth/2
		
		if(value.key == adres[indexAdres])
			lastMath = value
    }
});
lastMath.cells = newDataCells

console.log(data)


Метод Object.traverse взял из этого поста https://javascript.ru/forum/project/51879-object-t...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
data[0].key= 1;
data[1].key= 2;
Ответ написан
var data = [
  {key:'raz', cells:[{val: '1'},{val:'razoviy'}]},
  {key:'dva', cells:[{val: '2'},{val:'vtoroy'}],children:[
    {key:'poddva', cells:[{val: '2'},{val:'podvtoroy'}],children:
    		[{key:'podpoddva', cells:[{val: '2'},{val:'podpodvtoroy'}]},{key:'raz', cells:[{val: '1'},{val:'raz'}]}]
    	},
      {key:'poddvadva', cells:[{val: '2'},{val:'podvtoroyvtoroy'}]}
  ]},
  {key:'tri', cells:[{val: '3'},{val:'trtiy'}]}
]

var newDataCells = [{val: '1.0'},{val:'raz raz, est svyaz'}]

var obj = data.find(val => val.key == 'dva')
obj.cells = newDataCells;

console.log(data);
Ответ написан
Ваш ответ на вопрос

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

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