我编写了一个演示程序,通过索引从数组中删除特定元素。
var splice_a = function (array, index) {
array.splice(index, 1);
return array
};
var splice_b = function (array, index) {
return array.splice(index, 1)
};
var test = function () {
var array = [1, 2, 3];
alert(splice_a(array, 1));
alert(splice_b(array, 1));
};

<button onclick="test()">Click me</button>
&#13;
Array.prototype.splice()说return value
:
包含已删除元素的数组。如果只有一个元素 删除后,返回一个元素的数组。如果没有元素 删除后,返回一个空数组。
它没有提到:如果我想获得结果数组,我应该将它与关键字return
结合使用吗?
应该是一个案例,因为我得到了2个不同的结果:
1,3
3
我的问题:在这种情况下return array.splice(index, 1)
会发生什么?
答案 0 :(得分:1)
生成的数组是您自己的数组。不需要退回。 所以它就是:
var splice_a = function (array, index) {
array.splice(index, 1);
return array
};
var array = [1, 2, 3, 4];
splice_a(array, 1);
alert(array) //will show 1,3,4;
splice_a(array, 1);
alert(array) //will show 1,4;
答案 1 :(得分:1)
Array.prototype.splice将从n
数组索引中删除m
数据,并将删除的值作为数组返回:
var m = 2,
n = 3;
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var removedValues = arr.splice(m, n);
console.log(arr, removedValues);
因此,在您的情况下,它将从数组中删除一个元素(索引处的值)并将其返回到新数组中。
答案 2 :(得分:1)
以下是正在发生的事情的抽象示例:
// a function that removes the last element from an array, and returns 1
Array.prototype.foo = function() {
this.pop()
return 1
}
// a function that removes the last element from an array, and returns the array
Array.prototype.bar = function() {
this.pop()
return this
}
如果你要调用arr.foo()
或arr.bar()
,arr
会发生同样的事情,但是你调用的函数的返回值是不同的。并非每个Array.prototype
方法都返回数组。例如,splice
不会返回原始数组。这类似于你想要做的事情:
function foo_a(arr) {
// call foo, removes element from arr.
arr.foo() // We do not return here so the fact that foo returns 1 is not used.
return arr
}
function foo_b(arr) {
// call foo, removes element from arr.
return arr.foo() // We return the return value of foo here, which is 1
}
var arr = [1, 2, 3, 4];
foo_a(arr) // [1, 2, 3]
foo_b(arr) // 1
<强> TL;博士强>
return arr.foo()
基本上是说“返回foo的返回值”,它始终为1,无论它对数组做了什么。
答案 3 :(得分:1)
我修改了你的函数以显示返回值的差异。它们将以相同的方式改变传入的数组。唯一改变的是返回值。这可能是你感到困惑的地方。请注意,array
变量在splice_a
运行之前已由splice_b
更改。
var splice_a = function (array, index) {
var removed = array.splice(index, 1);
console.log(` Removed = ${removed}`);
console.log(` Array = ${array}`);
return array;
};
var splice_b = function (array, index) {
var removed = array.splice(index, 1)
console.log(` Removed = ${removed}`);
console.log(` Array = ${array}`);
return removed;
};
var array = [1, 2, 3];
console.log(`Array before splice_a: ${array}`);
splice_a(array, 1);
console.log(`Array before splice_b: ${array}`);
splice_b(array, 1);
console.log(`Final value of array: ${array}`);
至于为什么你想要返回值,如果它正在改变。这主要是为了方便链接命令。考虑第一个功能:
var splice_a1 = function (array, index) {
var removed = array.splice(index, 1);
return array;
};
var splice_a2 = function (array, index) {
var removed = array.splice(index, 1);
};
var array = [1, 2, 3];
// This will run, because splice_a1 returns an array
splice_a1(array, 1).forEach( _ => console.log(_) )
// This will throw an error, because <undefined> does not have a forEach()
splice_a2(array, 1).forEach( _ => console.log(_) )