【问题标题】:Javascript "shift" versus "splice" - are these statements equal?Javascript“shift”与“splice”——这些语句是否相等?
【发布时间】:2012-05-31 07:48:10
【问题描述】:

我只是想确认以下两个 Javascript 语句是否产生相同的结果,在我看来:

第一:

var element = my_array.splice(0,1)[0];

第二:

var element = my_array.shift();

我想在我自己的代码中将第一个替换为第二个,以提高可读性。我可以这样做吗?

【问题讨论】:

标签: javascript arrays array-splice


【解决方案1】:

这两行代码从数组中删除第一个元素,并返回删除的元素,它们都在所有主流浏览器中都支持。

你应该使用第二个,代码确实更具可读性。

【讨论】:

    【解决方案2】:

    它们会产生相同的效果,是的。 splice(0, 1) 将从my_array 中删除第一个元素并返回一个包含该元素的新数组。 shift 也会这样做,但返回元素本身,而不是数组。

    shift 更具可读性(在我看来)并且也是 significantly faster(至少在 Chrome 中):

    【讨论】:

    • 我对每个人的答案都投了赞成票 - 但选择你的答案是因为额外的性能图形和信息。谢谢大家!
    【解决方案3】:

    shift 返回被移除的元素,splice 返回被移除元素的数组。

    话虽如此,这两个语句做同样的事情,我同意第二个更具可读性。

    【讨论】:

      【解决方案4】:

      splice 将作为数组返回,但不会从对象中删除数据,而是进行复制


      shift 只需从前面给出一个数据并从对象中删除


      例如,

      const object = {1}
      object.slice(); // return [{1}]
      //object will be : {1}
      object.shift(); // return {1}
      //object will be : {} as shift remove the front data 
      

      【讨论】:

      • 首先,代码示例本身是错误的。其次,我认为您混淆了拼接和切片。 Splice 确实会改变数组,即它修改原始数组,就像 shift 一样。另一方面,切片不会改变数组并返回一个新数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多