拼接方法不会删除数组

时间:2016-10-13 21:49:31

标签: javascript arrays splice

我正在尝试实现一个带有三个参数(min,max,step)的函数,并使用该步骤生成从min到max的整数范围。第一个整数是最小值,第二个是范围的最大值,第三个是步骤。

以下是它应该是什么样子的示例: generateRange(2,10,2)应该返回[2,4,6,8,10]的数组。

我正在使用splice方法删除数组中任何大于max参数的现有元素。

function generateRange(min, max, step) {
  var arr = [];
  var count = min;
  for (var i = 0; i < max / step; i++) {
    arr[i] = count;
    count = count + step;
    arr[i] > max ? arr.splice(i, 1) : arr[i];
  }
  return arr;
}

console.log(generateRange(2, 10, 2));

每当我console.log我的结果时,我会在最后一项之后得到一堆逗号...所以它看起来像这样:[2,4,6,8,10 ,,,,]

似乎没有删除项目。我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:2)

三元运算符有点奇怪,因为表达式没有存储。它通过删除太大的值来修复数组。这有效,但如果有第二次, i 将会增加,并且通过分配给 arr [i] ,数组的长度将再次增加好像之前没有执行splice(除了 i-1 索引的未定义值)。

最好在分配超出范围的值之前退出循环。在这种情况下继续循环是没有意义的。

因此,将count变量设为循环变量并调整条件:

&#13;
&#13;
function generateRange(min, max, step){
    var arr = [];
    for(var count = min; count <= max; count+=step){
        arr.push(count);
    }
    return arr;
}

var res = generateRange(2, 10, 2);

console.log(res);
&#13;
&#13;
&#13;

可读性较差但更短的ES6版本是:

&#13;
&#13;
function generateRange(min, max, step){
    return Array.from(Array(Math.floor((max-min)/step)+1), (x,i) => min+i*step);
}

let res = generateRange(2, 10, 2);

console.log(res);
&#13;
&#13;
&#13;