Как заменить объекты в массиве?
Есть объекты такого вида:
objectForScroll = { height: layout.height, offset: layout.y, id: this.props.currentFieldId }
Я делаю push в массив arrayOfSizes, когда происходит отрисовка каждого поля на странице. Проблема в том, что запись в массив происходит при каждом ререндеринге, и в теории массив может быть бесконечным. Мне нужно написать условие, если объект с данным id уже существует в массиве, то переписать его, и если объекта с таким id нет в массиве, то записать его. Все это нужно для того чтобы в итоге получался одномерный массив, с всегда одинаковом кол-во объектов внутри. То есть чтобы, в массив не происходила запись бесконечно. Как это можно сделать?
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Что-то такое?
let arrayOfSizes = [
{ height: 1, offset: 1, id: 1 },
{ height: 2, offset: 2, id: 2 },
{ height: 3, offset: 3, id: 3 },
{ height: 4, offset: 4, id: 4 },
{ height: 5, offset: 5, id: 5 }];
let newObject = { height: 15, offset: 15, id: 1 };
let newArrayOfSizes = arrayOfSizes.map(item => item.id === newObject.id? newObject:item);
console.log(newArrayOfSizes);
или такой вариант
let arrayOfSizes = [
{ height: 1, offset: 1, id: 1 },
{ height: 2, offset: 2, id: 2 },
{ height: 3, offset: 3, id: 3 },
{ height: 4, offset: 4, id: 4 },
{ height: 5, offset: 5, id: 5 }];
let newObject = { height: 15, offset: 15, id: 1 };
var oldObject = arrayOfSizes.find(item => item.id === newObject.id);
Object.assign(oldObject, newObject);
console.log(arrayOfSizes);
Условия по типу существует или нет пишется просто.
let arrayOfSizes =[
{ height: 1, offset: 1, id: 1 },
{ height: 2, offset: 2, id: 2 },
{ height: 3, offset: 3, id: 3 },
{ height: 4, offset: 4, id: 4 },
{ height: 5, offset: 5, id: 5 }];
let newObject = { height: 10, offset: 10, id: 10 };
if (arrayOfSizes.find(item => item.id === newObject.id )) {
//... выбирайте произвольный необходимый для вас вариант
} else {
arrayOfSizes.push(newObject);
}
console.log(arrayOfSizes);