我有一个小问题,理解为什么我得到这个输出。
var arr = ["a", "b", "c", "d", "e", "f"];
arr.splice(2,0,"1");
console.log(arr);
var arr2 = ["a", "b", "c", "d", "e", "f"];
arr2 = arr2.splice(2,0,"2");
console.log(arr2);
输出是:
[ 'a', 'b', '1', 'c', 'd', 'e', 'f' ]
[]
为什么第二行输出不是:
[ 'a', 'b', '2', 'c', 'd', 'e', 'f' ]
是分配问题还是什么?
答案 0 :(得分:7)
阅读splice方法。它返回
包含已删除元素的数组。如果只删除一个元素,则返回一个元素的数组。
通过做
arr2 = arr2.splice(2,0,"2");
你用splice返回的空数组arr
覆盖初始数组[]
。
答案 1 :(得分:2)
1 - splice方法更改数组的内容
2 - splice方法返回删除的元素 - ** Not original Array **
答案 2 :(得分:0)
所以问题是只有部分方法返回变异后的原始对象作为返回值。即使方法设计不同,您也可以使用方法装饰器来保持对原始对象的访问。
const chainer = (target) =>
new Proxy(target, {
get: (_, prop, receiver) =>
typeof target[prop] === 'function'
? new Proxy(target[prop], {
apply: (f, _, args) => {
f.apply(target, args);
return {
this: receiver,
target,
}
},
})
: target[prop],
});
const arr2 = chainer(["a", "b", "c", "d", "e", "f"])
.splice(2,0,"1").this
.splice(2,0,"2").target;
console.log(arr2);