我有一个整数数组,我正在使用.push()
方法添加。
我知道splice()
方法在数组中添加/删除项目,并返回删除的项目。
但是有没有办法同时从不同索引的数组中删除多个元素?
我知道我们也可以使用filter()
方法,但filter()
方法会创建一个新数组,其中所有元素都通过我提供的函数实现的测试,这是我不想要的。
前: -
var array = [1,2,3,4,5];
我知道删除3和5我可以按照以下步骤操作: -
- array.splice(2,1);
- array.splice(3,1);
醇>
但是,如果不使用splice()
方法两次,我可以一步完成吗?
答案 0 :(得分:3)
如果您知道要删除的确切值,可以使用array.filter()
。
这会同时从不同索引的数组中删除多个元素。
案例中的例子:
var filtered = [1,2,3,4,5].filter(value => { return value !== 3 && value !== 5 });
console.log(filtered)

答案 1 :(得分:1)
您可以在解构赋值时使用尾随逗号来从数组中选择特定元素,将数组中的结果值分配给原始数组引用。
var array = [1,2,3,4,5];
{let [a,b,,c,,] = array; array = [a,b,c]};
console.log(array);

您可以在数组上使用对象解构来仅从数组中获取特定索引
var array = [1,2,3,4,5];
{let {0:a,1:b,3:c} = array; array = [a,b,c]};
console.log(array);

您还可以使用.forEach()
迭代要匹配的元素数组,.indexOf()
,.splice()
以删除与数组中元素值匹配的元素
var array = [1,2,3,4,5];
[3, 5].forEach(p => array.splice(array.indexOf(p), 1));
console.log(array);

使用for..of
循环,Array.prototype.findIndex()
,Array.prototype.splice()
var array = [1,2,3,4,5];
var not = [3, 5];
for (let n of not) array.splice(array.findIndex(v => v === n), 1);
console.log(array);

for..of
循环使用Array.prototype.entries()
,Array.prototype.some()
,Array.prototype.splice()
var array = [1,2,3,4,5];
var not = [3,5];
for (let [k, p] of array.entries()) not.some(n => !(n-p)) && array.splice(k, 1);
console.log(array);

您还可以使用for
循环,Object.assign()
设置索引以保持在数组的开头,调用.splice()
并将参数设置为-
.length
要从数组中删除的元素数
var array = [1,2,3,4,5];
var not = [3,5];
for (var o = {}, k = -1, i = 0; i < array.length; i++) {
if (!not.some(n => n === array[i])) o[++k] = array[i];
}
Object.assign(array, o).splice(-not.length);
console.log(array);
&#13;
将Array.prototype.reduce()
与Object.assign()
var array = [1,2,3,4,5];
var not = [3,5];
Object.assign(array, array.reduce(([o, not, k], p) =>
[Object.assign(o, !not.some(n => n === p) ? {[++k]:p} : void 0), not, k]
, [{}, not, -1]).shift()
).splice(-not.length);
console.log(array);
&#13;
另一个选项,如果数字是唯一的,则使用Set
,.delete()
,在解构分配时使用rest元素将Set
对象转换为Array
var array = new Set;
var not = [3, 5];
for (let n = 1; n <= 5; n++) array.add(n);
for (let n of not) array.delete(n);
[...array] = array;
console.log(array); // `array = new Set(array)`
&#13;
答案 2 :(得分:1)
当您知道需要删除的特定值以及阵列较小时的硬编码:
var array = [1,2,3,4,5,6,7];
array.splice(2,3,4);
console.log(array);
答案 3 :(得分:1)
可能你可以这样做;
var arr = [1,2,3,4,5,17,23,37,61,15],
itemsToGetRidOff = [3,17,15,1,23];
arr.reduceRight((_,e,i,a) => itemsToGetRidOff.includes(e) && a.splice(i,1),[]);
console.log(arr);