网站首页 > 技术文章 正文
了解如何在 JavaScript 中轻松地从数组中删除具有指定 ID 的对象。
有时我们可能会使用一组具有唯一 ID 的对象,这些 ID 允许它们中的每一个在其他对象中被唯一标识。
例子
const arr = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Peter' },
{ id: 3, name: 'Kate' },
];
如果我们想从数组中删除一个具有特定 ID 的对象怎么办? 我们将在本文中学习多种方法。
1.for循环中的数组splice()方法
要在 JavaScript 中通过 ID 从数组中删除元素,我们可以使用 for 循环将数组中每个对象的 ID 与指定的 ID 进行比较。 如果一个对象的 ID 匹配,我们可以调用数组的 splice() 方法,传递对象的索引和 1 作为参数从数组中删除对象。
例子
function removeObjectWithId(arr, id) {
for (let i = 0; i < arr.length; i++) {
const obj = arr[i];
if (obj.id === id) {
arr.splice(i, 1);
i--;
}
} return arr;
}const arr = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Kate' },
{ id: 3, name: 'Peter' },
];removeObjectWithId(arr, 2);// [ { id: 1, name: 'John' }, { id: 3, name: 'Peter' } ]
console.log(arr);
我们使用传统的 for 循环遍历数组并访问每个元素。 在循环中,我们使用 if 语句来检查当前索引的元素的 id prop 是否与指定的 ID 相同。 如果是,我们在数组上调用 splice() 方法。
Array splice() 方法通过删除现有元素同时添加新元素来更改数组的内容。
例子
const arr1 = ['a', 'b', 'c'];// Removing elements
arr1.splice(1, 2);
console.log(arr1); // [ 'a' ]// Removing and adding new elements
const arr2 = ['a', 'b', 'c'];
arr2.splice(1, 2, 'd', 'e');
console.log(arr2); // [ 'a', 'd', 'e' ]
此方法接受三个参数:
- start - 开始更改数组的索引。
- deleteCount - 从开始删除的元素数
- item1, item2, ... - 要添加到数组的可变数量的元素,从 start 开始。
我们指定 deleteCount 为 1 和目标索引的开始,以使 splice() 仅从数组中删除具有该索引的对象。 我们没有指定更多参数,因此没有任何内容添加到数组中。
避免副作用
Array splice() 方法改变传递的数组。 这给我们的 removeObjectWithId() 函数带来了副作用。 为避免修改传递的数组并创建纯函数,请制作数组的副本并在副本上调用 splice(),而不是原来的
function removeObjectWithId(arr, id) { // Making a copy with the Array from() method
const arrCopy = Array.from(arr); for (let i = 0; i < arrCopy.length; i++) {
const obj = arrCopy[i];
if (obj.id === id) {
arrCopy.splice(i, 1);
i--;
}
}
return arrCopy;
}const arr = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Kate' },
{ id: 3, name: 'Peter' },
];const newArr = removeObjectWithId(arr, 2);// [ { id: 1, name: 'John' }, { id: 3, name: 'Peter' } ]
console.log(newArr);// original not modified
/**
[
{ id: 1, name: 'John' },
{ id: 2, name: 'Kate' },
{ id: 3, name: 'Peter' }
]
*/
console.log(arr);
小费
不修改外部状态的函数(即纯函数)往往更容易预测和推理。 这使得限制程序中副作用的数量成为一种好习惯。
2. 数组 filter() 方法
我们还可以使用 filter() 方法按 ID 从数组中删除一个元素。 我们在数组上调用 filter(),传递一个回调,该回调为该数组中的每个元素返回 true,除了具有指定 ID 的对象。
例子
function removeObjectWithId(arr, id) {
return arr.filter((obj) => obj.id !== id);
}const arr = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Kate' },
{ id: 3, name: 'Peter' },
];const newArr = removeObjectWithId(arr, 2);// [ { id: 1, name: 'John' }, { id: 3, name: 'Peter' } ]
console.log(newArr);// original not modified
/**
[
{ id: 1, name: 'John' },
{ id: 2, name: 'Kate' },
{ id: 3, name: 'Peter' }
]
*/
console.log(arr);
Array filter() 方法创建一个新数组,其中填充了通过回调函数指定的测试的元素。 它不会修改原始数组。
例子
const arr = [1, 2, 3, 4];const filtered = arr.filter((num) => num > 2);
console.log(filtered); // [ 3, 4 ]
在我们的示例中,我们设置了一个测试,即数组中的对象仅在其 id 属性不等于指定 ID 时才会通过。 这确保了具有指定 ID 的对象不包含在从 filter() 返回的新数组中。
关注七爪网,获取更多APP/小程序/网站源码资源!
猜你喜欢
- 2024-11-27 VirtualBox 7.1.2 发布! 带来多项 GUI 更新,无人值守安装已彻底删除
- 2024-11-27 Spring boot+Mybatisplus用AR模式实现逻辑删除操作
- 2024-11-27 碎片时间学编程「127]:从数组中删除元素
- 2024-11-27 JavaScript程序员需要掌握的5个debug技巧
- 2024-11-27 python 列表删除
- 2024-11-27 souce-map-js + Vue 还原生成环境报错,让JS报错无所遁形
- 2024-11-27 如何使用 rmdir 命令删除目录?
- 2024-11-27 illustrator插件-常用功能开发-删除所有蒙版-js脚本开发-AI插件
- 2024-11-27 如何在 Ubuntu 22.04 LTS 中添加、删除和授予用户 Sudo 权限
- 2024-11-27 删除此函数式编程技术的 Switch 语句
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-