Вставка значений x и y в переменные массива - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть массив с переменными. Я хотел бы добавить в массив значения pu sh некоторых координат x и y, но когда я пытаюсь вместо значений переменных pu sh, pu sh создает новые переменные и присваивает им значения.

Так это выглядит

0: {id: "t523470", name: "tPm1", x: 0, y: 0, parent: null, …}
1: {id: "t523471", name: "tPm2", x: 0, y: 0, parent: null, …}
2: {y: 651, x: 446}
3: {y: 800.015625, x: 802.328125}

Вместо этого

0: {id: "t523470", name: "tPm1", x: 446, y: 651, parent: null, …}
1: {id: "t523471", name: "tPm2", x: 802.328125, y: 800.015625, parent: null, …}




    function getModulePosition(id) {

        for (let i = 0; i < axisViewElements.modules.length; i++) {



            let currentElement = axisViewElements.modules[i].id;
            if (id === currentElement) {
                continue;
            }
            let module = document.getElementById(currentElement);

            let modulePos = { x: module.getBoundingClientRect().left, y: module.getBoundingClientRect().top }
            console.log(modulePos);



            axisViewElements.modules.push({

                y: modulePos.y,
                x: modulePos.x

            });


        }
    }

Ответы [ 4 ]

1 голос
/ 13 февраля 2020

Попробуйте здесь https://runkit.com/embed/pd68veqr5ey7

enter image description here

let input = [
  {id: "t523470", name: "tPm1", x: 0, y: 0, parent: null},
  {id: "t523471", name: "tPm2", x: 0, y: 0, parent: null}
];

let newValue = [
 {y: 651, x: 446},
 {y: 800.015625, x: 802.328125}
];

input.forEach((item, index) => item = Object.assign( item , newValue[index]));
console.log(input);
1 голос
/ 13 февраля 2020

Array push метод всегда вставляет новый элемент в массив. Поскольку вам нужно обновить существующий элемент, вы можете просто сделать это:

axisViewElements.modules[i].y = modulePos.y;
axisViewElements.modules[i].x = modulePos.x;
1 голос
/ 13 февраля 2020

Вы нажимаете на массив, который всегда создает новый элемент.

Я предполагаю, что ваши элементы уникальны внутри массива по отношению к их атрибуту id. Поэтому вы должны найти элемент с id и затем обновить атрибуты x и y.

Ваш код будет выглядеть следующим образом:

elementToUpdate = axisViewElements.modules.find(el => el.id === you_id)
elementToUpdate.x = modulePos.x
elementToUpdate.y = modulePos.y
1 голос
/ 13 февраля 2020

Array.prototype.pu sh всегда создает новый индекс с вашими значениями. Вы не можете использовать .pu sh () и ожидать изменения предыдущих значений в массиве. Для вашей цели вам нужно l oop через ваш массив, найти индексы, в которых вы хотите изменить некоторые значения, и затем присвоить им новые значения.

...