我有理解拼接的问题,我希望得到帮助。
请检查jsfiddle。
http://jsfiddle.net/fantill/TbpWf/1/
value = "c, a, b"
value = value.split(',').splice(1, 1).join(',')
alert(value);
该值应该返回'c, b'
。
但是,它会返回'a'
;
这种方法有什么问题?
非常感谢。
答案 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);