8

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

请检查jsfiddle。

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

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

该值应该有 return 'c, b'

但是,它返回'a'

这种方法有什么问题?

非常感谢你。

4

4 回答 4

19

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

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

如果你这样做了value = value.splice(...)value就会被覆盖,并且数组会丢失!

于 2013-02-26T06:15:30.200 回答
9

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

> var value = "c, a, b";
> value = value.split(', ');
["c", "a", "b"]
> value.splice(1, 1);
["a"]
> value
["c", "b"]
于 2013-02-26T06:16:37.623 回答
9
var a = ["1","2","3"]
a.splice(1,1) && a
a=["1","3"]
于 2017-07-02T14:12:22.050 回答
2

如果您发现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);

于 2019-03-17T19:39:11.077 回答