繁体   English   中英

在Javascript中删除Set中的数组元素

[英]Delete an array element in Set in Javascript

以下面的例子为例:

var s = new Set([1,2,3]);
s.add([4,5]); //Set(5) {1, 2, 3, 4, [4, 5]}
s.delete([4,5]);//false

我也试过s.delete(Array(4,5))s.delete('[4,5]') ,但它们也不起作用。

为什么? 需要考虑delete函数的实现代码吗?

[4,5]你添加一个不同的对象比[4,5]你告诉它删除。 请记住,对象在 JS 中被引用,因此您对两个恰好看起来相同的不同对象使用了两个单独的引用。

以下是您如何使用相同的对象及其引用:

var s = new Set([1,2,3]);
var newItem = [4, 5];
s.add(newItem); //Set(5) {1, 2, 3, 4, [4, 5]}
s.delete(newItem);

这不是您需要考虑的delete方法的实现,因为无论您传递什么它都是完全一致的,您需要考虑这样一个事实,即在 JS 中始终引用对象类型而基本类型则不是。

您需要对数组的引用才能删除相同的数组。 如果对象不共享相同的引用,则它们是不同的。

 var s = new Set([1, 2, 3]), a = [4, 5]; s.add(a); console.log([...s]); s.delete(a); console.log([...s]);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

这是因为您需要将要删除的数组的引用传递给delete ,而不是传递一个恰好具有相同值的单独数组。

试试这个:

var s = new Set([1,2,3]);
var array = [4,5];

s.add(array);

console.log('before: ' + [...s]);

s.delete(array);

console.log('after delete: ' + [...s]);

JSBin: http ://jsbin.com/nedoxenevu/1/edit?html,js,console

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM