whe*_*hys 62 javascript arrays
有没有比这更好的方法将数组拼接到javascript中的另一个数组中
var string = 'theArray.splice('+start+', '+number+',"'+newItemsArray.join('","')+'");';
eval(string);
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 129
您可以使用apply来避免eval:
var args = [start, number].concat(newItemsArray);
Array.prototype.splice.apply(theArray, args);
Run Code Online (Sandbox Code Playgroud)
该应用功能用于调用另一个函数,与给定的上下文中和参数,作为数组提供,例如:
如果我们打电话:
var nums = [1,2,3,4];
Math.min.apply(Math, nums);
Run Code Online (Sandbox Code Playgroud)
apply函数将执行:
Math.min(1,2,3,4);
Run Code Online (Sandbox Code Playgroud)
Lui*_*rez 49
更新:ES6版本
如果您在ES6中编码,您可以使用"传播运营商"(...)
array.splice(index, 0, ...arrayToInsert);
Run Code Online (Sandbox Code Playgroud)
要了解有关扩展运算符的更多信息,请参阅mozilla文档.
'老'的ES5方式
如果你把最顶层的答案包装成一个函数你会得到这个:
function insertArrayAt(array, index, arrayToInsert) {
Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert));
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
var arr = ["A", "B", "C"];
insertArrayAt(arr, 1, ["x", "y", "z"]);
alert(JSON.stringify(arr)); // output: A, x, y, z, B, C
Run Code Online (Sandbox Code Playgroud)
你可以在这个jsFiddle中查看:http://jsfiddle.net/luisperezphd/Wc8aS/
这个问题真的很旧,但是使用ES6,有一种更简单的方法可以使用spread运算符:
sourceArray.splice(index, 0, ...insertedArray)
Run Code Online (Sandbox Code Playgroud)
如果您在浏览器中使用未编译的javascript,请务必检查目标浏览器是否支持它,网址为https://kangax.github.io/compat-table/es6/#test-spread_(...)_operator.
此外,这可能稍微偏离主题,但如果您不想或不需要修改原始数组,但可以使用新数组,请考虑以下方法:
mergedArray = sourceArray.slice(0, index).concat(insertedArray, sourceArray.slice(index))
Run Code Online (Sandbox Code Playgroud)
如果你想要一些与splice方法几乎相同的东西,你也可以将这样的函数添加到Array原型中.例如
Array.prototype.spliceArray = function(index, n, array) {
return Array.prototype.splice.apply(this, [index, n].concat(array));
}
Run Code Online (Sandbox Code Playgroud)
那么用法就是:
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"]
Run Code Online (Sandbox Code Playgroud)
在这里看到它:http://jsfiddle.net/TheMadDeveloper/knv2f8bb/1/
一些说明:
splice函数直接修改数组,但返回已删除的元素数组...而不是拼接数组.Array在使用专用数组类的情况下,扩展将不起作用,例如ImageData数据Uint8ClampedArray.