所以我今天才发现这样做:
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
函数存储对象
答案 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]
是对同一对象的引用。
没有直接的方法可以从对象转到sub
或arr[1]
。
由于您知道arr
包含对象的引用,因此您可以使用indexOf
搜索该引用的副本。
var index = arr.indexOf(sub);
然后,您可以使用它从数组中删除元素。
arr.splice(index, 1);