使用JavaScript

时间:2015-09-02 17:12:20

标签: javascript arrays

我试图找到替换数组中最后N个项目的最佳方法。我想到了以下几点:

从阵列中删除N项:

arr = arr.slice(-N);

通过array.push()添加所需的值,进行迭代以获得所需的插入次数,如下所示:

for(var i=0; i<=N; i++) {
  arr.push(new value);
}

对此有更优雅的解决方案吗?

感谢。

6 个答案:

答案 0 :(得分:8)

一个简单的反向循环就足够了:

for(i = arr.length - 1; i >= arr.length - N; i--) {
    arr[i] = new_value;
}

答案 1 :(得分:3)

您可以使用数组.fill()来执行此操作。

&#13;
&#13;
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;
&#13;
&#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)

Array.prototype.splice

删除并可选地将值添加到以任何索引值开始和结束的数组。

示例:

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));