将存储在变量中的对象的值设置为null

时间:2014-10-09 13:48:04

标签: javascript arrays

所以我今天才发现这样做:

a = { b: { c: 1, d: 2 }, d: {} }
sub = a.b
// sub is { c: 1, d: 2 }

sub现在实际上是存储在一个克隆中的对象。

现在,如果我这样做:

sub.c = "x"
// a is now: { b: { c: 'x', d: 2 }, d: {} } // nice

同样的事情适用于数组。

所以我有这个数组:

arr = [{a: 1, b: 2}, {c: 3, d: 4}]
sub = arr[1]

我想从数组中移除sub,以便arr变为:[{a: 1, b: 2}]但如果我sub = null我只是为sub分配一个新值}。 delete也是如此。

delete sub // will unset the sub variable, not the object that it references.

所以问题是:如何使用{c: 3, d: 4}

从数组中删除sub

即使它有效,我也不能使用delete arr[1],因为我不知道索引。我正在使用min

lodash函数存储对象

2 个答案:

答案 0 :(得分:3)

要从数组中删除元素,无论是原始值还是对象,您仍然使用splice。要查找元素索引,您可以使用indexOf。这可能是因为:

  

indexOf使用严格相等(使用===或三等号运算符使用的相同方法)将searchElement与Array的元素进行比较。

如此结合在一起

arr.splice(arr.indexOf(sub), 1);

看一下这个演示:



var arr = [{a: 1, b: 2}, {c: 3, d: 4}]
var sub = arr[1];

alert('Before: ' + JSON.stringify(arr));

arr.splice(arr.indexOf(sub), 1);

alert('After: ' + JSON.stringify(arr));




答案 1 :(得分:2)

  

所以问题是:如何使用sub

从数组中删除{c: 3, d: 4}

没有办法直接这样做。

JavaScript中的关系是单向的。

sub是对象的引用。 arr[1]是对同一对象的引用。

没有直接的方法可以从对象转到subarr[1]

由于您知道arr包含对象的引用,因此您可以使用indexOf搜索该引用的副本。

var index = arr.indexOf(sub);

然后,您可以使用它从数组中删除元素。

arr.splice(index, 1);