比较来自世界各地的卖家的域名和 IT 服务价格

将数组结合成一个数组的最佳方法 javascript

是否有更好的方法,将数组连接到另一个数组 javascript


var string = 'theArray.splice/'+start+', '+number+',"'+newItemsArray.join/'","'/+'"/;';
eval/string/;
已邀请:

三叔

赞同来自:

您可以使用
https://developer.mozilla.org/ ... apply
, 避免 eval:


var args = [start, number].concat/newItemsArray/;
Array.prototype.splice.apply/theArray, args/;


功能
https://developer.mozilla.org/ ... apply
用来用给定的上下文和参数调用另一个函数,例如作为数组:

如果我们打电话:


var nums = [1,2,3,4];
Math.min.apply/Math, nums/;


应用功能将执行:


Math.min/1,2,3,4/;

知食

赞同来自:

UPDATE: 版本 ES6

如果您对中编码 ES6, 您可以使用 "spread operator" /.../


array.splice/index, 0, ...arrayToInsert/;


有关分发运营商的更多信息,请参阅
https://developer.mozilla.org/ ... yntax
.

在 'old' 在 ES5 边

如果将顶部响应函数,请参考以下内容:


function insertArrayAt/array, index, arrayToInsert/ {
Array.prototype.splice.apply/array, [index, 0].concat/arrayToInsert//;
}


你会像这样用它:


var arr = ["A", "B", "C"];
insertArrayAt/arr, 1, ["x", "y", "z"]/;
alert/JSON.stringify/arr//; // output: A, x, y, z, B, C


您可以在此检查。 jsFiddle:
http://jsfiddle.net/luisperezphd/Wc8aS/
/

二哥

赞同来自:

这个问题真的很古老,但是 ES6 使用操作员可以执行更简单的方法 spread:


sourceArray.splice/index, 0, ...insertedArray/


如果您正在使用 uncompiled javascript 在浏览器中,务必检查目标浏览器是否支持它
https://kangax.github.io/compa ... rator
.

此外,它可能有点关主题,但如果您不想要或不想更改原始数组,但可以使用新的数组,而是考虑此方法:


mergedArray = sourceArray.slice/0, index/.concat/insertedArray, sourceArray.slice/index//

君笑尘

赞同来自:

如果您需要几乎与方法相同的内容,您还可以将这样的功能添加到数组的原型中 splice. E.g.


Array.prototype.spliceArray = function/index, n, array/ {
return Array.prototype.splice.apply/this, [index, n].concat/array//;
}


然后使用将简单:


var array = ["A","B","C","","E","F"];

array.splice/3,1,"D"/;
// array is ["A","B","C","D","E","F"]

array.spliceArray/3,3,["1","2","3"]/;
// array is ["A","B","C","1","2","3"]


在这里看到他的行动:
http://jsfiddle.net/TheMadDeveloper/knv2f8bb/1/
/

有些笔记:

功能
splice

直接更改阵列,但返回已删除的元素数组......不是迷人的数组。

虽然通常不建议扩展课程 core javascript, 这对大多数标准框架相对无害。

扩张
Array

在使用专门的阵列的情况下,不起作用,例如 ImageData data Uint8ClampedArray.

郭文康

赞同来自:

上面的答案包括 splice.apply 并在一个衬里粘贴一个数组,堆栈会炸掉 stack overflow 对于一个大的肿块。
请参见此处的示例:
http://jsfiddle.net/gkohen/u49ku99q/
您可能必须剪切和推送插入的每个元素以及要工作的源阵列的剩余部分。
看 fiddle:
http://jsfiddle.net/gkohen/g9abppgy/26/
/


Array.prototype.spliceArray = function/index, insertedArray/ {
var postArray = this.splice/index/;
inPlacePush/this, insertedArray/;
inPlacePush/this, postArray/;

function inPlacePush/targetArray, pushedArray/ {
// Not using forEach for browser compatability
var pushedArrayLength = pushedArray.length;
for /var index = 0; index < pushedArrayLength; index++/ {
targetArray.push/pushedArray[index]/;
}
}
}

詹大官人

赞同来自:

这里有许多智能答案,但您使用的原因 splice, 它是它将物品放入当前数组而不创建另一个。 如果您需要创建一个数组
concat//

, 所以你可以使用
apply//

, 然后你创造 2 额外的垃圾阵列! 有点摧毁了写作宇宙的整体目标 Javascript. 此外,如果您不关心此内存使用 /你必须/ 只是
dest = src1.concat/src2/

; 它无限更可读。 因此,这是我最小的字符串,同时保持有效的响应。


for/ let item of src / dest.push/ item /;


或者如果您想填写它并获得一点浏览器支持:


src.forEach/ function/ x / { dest.push/x/; }/;


我相信第一个更富有成效 /这个词 ;/, 但在野生动物中的所有浏览器中都不支持。

龙天

赞同来自:

如果您不想用前两个参数绑定插入元素
https://developer.mozilla.org/ ... plice
,
优雅的使用方式
https://developer.mozilla.org/ ... /bind

https://developer.mozilla.org/ ... apply
一起。


theArray.splice.bind/null, startIndex, deleteCount/.apply/newItemsArray/;

八刀丁二

赞同来自:

我想拥有一个只参加源数组的功能,所以我有一个略微不同
功能基于

CMS


function spliceArray/array, index, howmany, source, start, end/ {
var arguments;
if/ source !== undefined /{
arguments = source.slice/start, end/;
arguments.splice/0,0, index, howmany/;
} else{
arguments = [index, howmany];
}
return Array.prototype.splice.apply/array, arguments/
}

Array.prototype.spliceArray = function/index, howmany, source, start, end/ {
return spliceArray/this, index, howmany, source, start, end/;
}


你可以看到:
https://jsfiddle.net/matthewvukomanovic/nx858uz5/
/

要回复问题请先登录注册