我试图找到替换数组中最后N个项目的最佳方法。我想到了以下几点:
从阵列中删除N项:
arr = arr.slice(-N);
通过array.push()添加所需的值,进行迭代以获得所需的插入次数,如下所示:
for(var i=0; i<=N; i++) {
arr.push(new value);
}
对此有更优雅的解决方案吗?
感谢。
答案 0 :(得分:8)
一个简单的反向循环就足够了:
for(i = arr.length - 1; i >= arr.length - N; i--) {
arr[i] = new_value;
}
答案 1 :(得分:3)
您可以使用数组.fill()来执行此操作。
var arr = [1, 2, 3, 4, 5, 6];
var N = 3;
var newValue = 0;
arr = arr.fill(newValue, -1 * N);
document.getElementById("output").innerHTML = arr;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="output"></div>
&#13;
最后N个元素被newValue替换。请注意:IE和Opera不支持此方法,但您可以编写将创建该方法的代码,如果它的&#39;不足。如果您的浏览器不支持,请参阅填充的MDN page on .fill()添加方法。
答案 2 :(得分:1)
更有效的方法是使用切片和concat的混合物。
function replaceItemsAtEnd(array, replacements) {
var start = array.slice(0, array.length - replacements.length);
return start.concat(replacements);
}
这样做的好处是不会改变原始数组。
使用数组作为替换项意味着您不仅可以使用相同的值替换。
答案 3 :(得分:0)
删除并可选地将值添加到以任何索引值开始和结束的数组。
示例:强>
var arr = [1, 2, 3, 4];
arr.splice(-1, 1, 'a', 'b', 'c');
答案 4 :(得分:0)
Tarun解决方案是第一个出现在我脑海中的解决方案,但我会略微改变它以避免数组长度小于N的情况。因此,它变为:
for(i = arr.length - 1; i>= 0 && N > 0; i--) {
arr[i] = new_value;
N--;
}
答案 5 :(得分:0)
怎么样:
var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
var anotherArr = [1, 2, 3];
Array.prototype.splice.apply(arr, [arr.length-anotherArr.length, anotherArr.length].concat(anotherArr));