【问题标题】:js. splice returns removed item?js。拼接返回删除的项目?
【发布时间】:2013-02-26 06:12:32
【问题描述】:

我在理解 splice 方面有问题,我想寻求帮助。

请检查 jsfiddle。

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

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

该值应该返回'c, b'

但是,它返回'a'

这个方法有什么问题?

非常感谢。

【问题讨论】:

  • 我不确定你在问什么。是的,splice 返回删除的项目,输出应该是 a,因为那是你删除的。问题出在哪里?

标签: javascript


【解决方案1】:

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

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

如果你执行value = value.splice(...)value 将被覆盖,数组丢失!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      var a = ["1","2","3"]
      a.splice(1,1) && a
      a=["1","3"]
      

      【讨论】:

      • 虽然这可能会回答这个问题,但一些 cmets 和/或解释会很好。这也将帮助其他用户。
      • 像这样的解决方案提醒我我不知道 javascript 是如何工作的。
      • splice 的结果总是一个数组,即使是一个空数组也会被计算为true。在 javascript 和大多数语言中,true && anything 总是等于那个东西,在这种情况下是拼接的数组。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-02
        • 2012-07-16
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-05
        相关资源
        最近更新 更多