3

我有一个小问题,无法理解为什么我会得到这个输出。

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' ]  

是任务问题还是什么?

4

3 回答 3

7

阅读拼接方法。它返回

包含已移除元素的数组。如果仅删除一个元素,则返回一个包含一个元素的数组。

所以通过做

arr2 = arr2.splice(2,0,"2");

你用 splice 返回的arr空数组覆盖初始数组。[]

于 2013-05-05T07:42:29.347 回答
2

1 - 拼接方法改变数组的内容

2 - splice 方法返回删除的元素 - ** 不是原始数组 **

于 2013-05-05T07:55:51.290 回答
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);

于 2021-06-29T15:05:42.020 回答