Question

I have a small issue with understanding why I'm getting this output.

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);

ouput is:

[ 'a', 'b', '1', 'c', 'd', 'e', 'f' ]
[]  

Why is the second line of output not:

[ 'a', 'b', '2', 'c', 'd', 'e', 'f' ]  

Is it an issue of assignment or what?

Was it helpful?

Solution

Reading about splice method. It returns

An array containing the removed elements. If only one element is removed, an array of one element is returned.

So by doing

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

you overwrite initial array arr with empty array [] returned by splice.

OTHER TIPS

1 - The splice method Changes the content of an array

2 - The splice method returns the element removed - ** Not original Array **

So the problem is that only some methods return the original object after mutation as the return value. You can use a method decorator to keep access to the original object available even when the methods are designed differently.

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);

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top