У меня есть такой массив
var items = [{id:'1',token:'jj'},{id:'2',token:'kk'}];
Я хочу удалить объект из массива, соответствующий id = 2
Вот мое решение
//find the corresponding object
let obj=items.find((item) => item.id=='2');
//loop through the original and delete
Есть ли другой способ сделать это более эффективно ??



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте функцию Массив # фильтр для удаления элемента / ов из массива. Фактически он возвращает новый массив, содержащий те элементы, которые соответствуют предикату.
let items = [{id:'1',token:'jj'},{id:'2',token:'kk'}];
let filtered = items.filter(item => item.id !== '2');
console.info(filtered);Для удаления из исходного массива
let items = [{id:'1',token:'jj'},{id:'2',token:'kk'}];
let index = items.findIndex(item => item.id === '2');
items.splice(index, 1);
console.info(items);Это неэффективно. Вам нужно получить индекс этого элемента из массива и использовать функцию splice. Я обновил
Я хотел бы предложить использовать splice, это не меняет ссылку на существующий массив, а просто удаляет желаемый элемент.
let items = [{id:'1',token:'jj'},{id:'2',token:'kk'}];
let indexToRemove = items.findIndex((eachElem) => {return eachElem.id == 2})
items.splice(indexToRemove, 1)
console.info(items)Можете проверить консоль: D
var items = [{id:'1',token:'jj'},{id:'2',token:'kk'}, {id:'4',token:'kk'}, {id:'2',token:'kl'}];
items.forEach(item =>{
if (item['id'] == '2') items.splice(items.indexOf(item),1)
})
console.info(items)Вы также можете использовать splice() с forEach():
var items = [{id:'1',token:'jj'},{id:'2',token:'kk'}];
items.forEach((item, index) => {
if (item.id === '2'){
items.splice(index,1);
}
});
console.info(items);
Но мне нужно изменить исходный массив