【问题标题】:Javascript: What's a better way to splice arrays together than what I'm using now?Javascript:有什么比我现在使用的更好的拼接数组的方法?
【发布时间】:2010-09-03 19:04:39
【问题描述】:
var newlist = list.slice( 0, pos ).concat( tasks ).concat( list.slice( pos ) );

这让我只是看着它不寒而栗。

【问题讨论】:

  • 在我看来并没有那么糟糕。但是,将数组的尾部移出并放入新元素可能会更快一些。如果你必须这样做很多,你可能想考虑一个更好的数据结构。
  • 你的意思是某种树?你会推荐什么?

标签: javascript arrays array-splice


【解决方案1】:

Array 有一个splice 方法。

【讨论】:

  • 但这似乎需要列出每个参数。那么,如何展开另一个数组作为该函数的扩展参数呢?或者它是否接受一个数组参数来拼接在一起(而不是将传递的数组拼接为新数组中的单个项目)?
  • 哎呀,太丑了。您可以使用splice 函数的apply 方法并从要拼接的数组中构建参数数组,但这非常可怕。我认为你的版本会更好。
【解决方案2】:

如果你不想修改原始数组,你可以像这样缩短你的数组:

var newlist = ​list.slice(0,pos).concat(tasks,list.slice(pos));

http://jsfiddle.net/RgYPw/

【讨论】:

  • 看起来您正试图在另一个数组的中间插入一个数组。您可以在此答案stackoverflow.com/a/12189963/984780 中使用函数insertArrayAt()。你会像这样使用它insertArrayAt(list, pos, tasks)。这会改变 list 如果您想要一个新列表,请使用 slice(0) 首先克隆列表。像这样:var newlist = insertArrayAt(list.slice(0), pos, tasks)
【解决方案3】:

你的方法和任何方法一样好—— 您必须单独拼接第二个数组的每个成员。

var list=[1,2,3,4,5,6,7,8,9], tasks= ['a','b','c'], pos=3;


while(tasks.length ) list.splice(pos,0,tasks.pop());

alert(list.join('\n'))

/*  returned value:
1
2
3
a
b
c
4
5
6
7
8
9
*/

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2014-06-03
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多