@vizavill

Можно ли создать массив ссылок на элемены?

Есть массив объектов, мне нужно добавить во второй массив ссылки на эти элементы, это возможно?
  • Вопрос задан
  • 1298 просмотров
Пригласить эксперта
Ответы на вопрос 2
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Так объекты же в JS и так по ссылке передаются.

var arr1=[{x:1},{y:2}],
           arr2=[];

       arr2.push(arr1[0]);
       arr2.push(arr1[1]);

       arr2[0].x=5;

       console.log(arr1[0].x);


Или я Вас не понял?
Ответ написан
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Смотря какого типа массив и какого типа элементы. Если массив строк или чисел, то нельзя, а если массив объектов, то можно:
var objArray = [
  { name: "abc" }, { name: "def" },
  { name: "ghi" }, { name: "jkl" }
];
var objArrayLinks = [ objArray[0], objArray[3] ];

console.dir({
  objArray: objArray,
  objArrayLinks: objArrayLinks
});

objArrayLinks[0].name = "mno";

console.dir({
  objArray: objArray,
  objArrayLinks: objArrayLinks
});

Вывод будет:
{ objArray:
   [ { name: 'abc' },
     { name: 'def' },
     { name: 'ghi' },
     { name: 'jkl' } ],
  objArrayLinks: [ { name: 'abc' }, { name: 'jkl' } ] }
{ objArray:
   [ { name: 'mno' },
     { name: 'def' },
     { name: 'ghi' },
     { name: 'jkl' } ],
  objArrayLinks: [ { name: 'mno' }, { name: 'jkl' } ] }

Скорее всего, Вы хотите сделать индекс в памяти, для этого вообще не нужно массив, а лучше использовать хеш.
Например:
var objHash = {
  object1: { name: "abc" },
  object2: { name: "def" },
  object3: { name: "ghi" },
  object4: { name: "jkl" }
};
var nameIndex = { abc: objHash.object1, jkl: objHash.object4 };

console.dir({
  objHash: objHash,
  nameIndex: nameIndex
});

nameIndex["jkl"].name = "mno";

console.dir({
  objHash: objHash,
  nameIndex: nameIndex
});
Вывод будет:
{ objHash:
   { object1: { name: 'abc' },
     object2: { name: 'def' },
     object3: { name: 'ghi' },
     object4: { name: 'jkl' } },
  nameIndex: { abc: { name: 'abc' }, jkl: { name: 'jkl' } } }
{ objHash:
   { object1: { name: 'abc' },
     object2: { name: 'def' },
     object3: { name: 'ghi' },
     object4: { name: 'mno' } },
  nameIndex: { abc: { name: 'abc' }, jkl: { name: 'mno' } } }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы