【问题标题】:Splice method not deleting items out of array拼接方法不删除数组中的项目
【发布时间】:2016-10-13 21:49:31
【问题描述】:

我正在尝试实现一个函数,该函数接受三个参数(最小值、最大值、步长)并使用步长生成从最小值到最大值的整数范围。第一个整数是最小值,第二个是范围的最大值,第三个是步长。

下面是它应该是什么样子的示例: 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, , , , ]

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

【问题讨论】:

  • 我运行代码时一切正常:[2, 4, 6, 8, 10]
  • 你为什么不增加直到 (max - max%step)/step 而不是做那种拼接废话
  • 为什么在不使用表达式的值时使用三元运算符?只需使用 if 声明即可。
  • 您的数组一开始是空的。没有要删除的现有元素。

标签: javascript arrays splice


【解决方案1】:

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

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

所以将count 变量设为循环变量和条件:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 2012-07-16
    • 1970-01-01
    • 2019-10-05
    • 2020-06-07
    • 2021-05-26
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多