JS。 splice返回删除的项目?

时间:2013-02-26 06:12:33

标签: javascript

我有理解拼接的问题,我希望得到帮助。

请检查jsfiddle。

http://jsfiddle.net/fantill/TbpWf/1/

value = "c, a, b"
value = value.split(',').splice(1, 1).join(',')
alert(value);

该值应该返回'c, b'

但是,它会返回'a';

这种方法有什么问题?

非常感谢。

4 个答案:

答案 0 :(得分:15)

.splice 返回已删除的项目。但是,它也在内部操纵数组。这可以防止您将任何内容链接到.splice;你必须做两个单独的电话:

value = value.split(',');
value.splice(1, 1);
console.log(value.join(','));

如果您执行value = value.splice(...),则会覆盖value,并且数组会丢失!

答案 1 :(得分:7)

.splice已就位,所以只需删除value =,它就会像您期望的那样修改数组:

> var value = "c, a, b";
> value = value.split(', ');
["c", "a", "b"]
> value.splice(1, 1);
["a"]
> value
["c", "b"]

答案 2 :(得分:6)

var a = ["1","2","3"]
a.splice(1,1) && a
a=["1","3"]

答案 3 :(得分:1)

如果您发现splice的返回行为很烦人,并且在一个程序中必须经常使用它,则可以考虑添加以下两个自定义原型函数之一来代替。

>

有一个流行的spliced选项,其作用与您期望的splice一样。

Array.prototype.spliced = function() {
    Array.prototype.splice.apply(this, arguments);
    return this;
}

value = "c, a, b";
value = value.split(',').spliced(1, 1).join(',');
console.log(JSON.stringify(value));

另一个选项是可以在各种情况下使用的选项。它将执行使用其后的参数指定的任何数组函数,并将始终返回该数组。

Array.prototype.arrEval = function() {
    var args = Array.prototype.slice.call(arguments);
    Array.prototype[args.shift()].apply(this, args);
    return this;
}

// splice example
value = "c, a, b";
value = value.split(', ').arrEval('splice', 1, 1).join(', ');
console.log(JSON.stringify(value));

// push example
value = value.split(', ').arrEval('push', 'a').join(', ');
console.log(JSON.stringify(value));

// unshift example
value = value.split(', ').arrEval('unshift', 'f', 'e', 'd').reverse().join(', ');
console.log(JSON.stringify(value));


使用内联变量赋值(实际上是粗体),也可以在没有自定义功能的情况下在同一行中执行同一操作。

value = "c, a, b"
value = ((arr = value.split(',')).splice(1, 1), arr.join(','))
alert(value);