【问题标题】:Iterate between specific range of number in a array [duplicate]在数组中的特定数字范围之间迭代[重复]
【发布时间】:2019-11-29 12:41:54
【问题描述】:

我有一个包含两个元素 [5, 50] 的数组。我希望这个数组迭代为 [5, 6, 7,......, 49, 50]。

我尝试下面的代码。但没有达到我的预期。

function All(arr) {
  let newArry = [];
  for(let i = arr[0]; i < arr[1]; i++ ) {
    newArry[i] = newArry.push(i);
  }
  return newArry;
}

console.log(All([5, 50]));

【问题讨论】:

  • 您的数组中只有两个元素....您的数组中没有 45 个元素。你能澄清一下你到底想要做什么吗?听起来你只需要一个 for 循环。
  • 你期望newArry.push(i) 会返回什么?

标签: javascript arrays loops


【解决方案1】:

像这样删除newArry[i] =

function All(arr) {
    let newArry = [];
    for(let i = arr[0]; i < arr[1]; i++ ) {
        newArry.push(i);
    }
    return newArry;
}    
console.log(All([5, 50]));

【讨论】:

    【解决方案2】:
    1. 获取要在其间迭代的两个值:

    const [start, end] = [5, 50];

    1. 在两点之间创建一个新的长度差数组:

    Array(end - start + 1) // [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

    1. 由于所有值都是undefined,因此使用Array#keys 创建一个迭代器对象:Array(end - start + 1).keys() // [object Array Iterator]

    2. 将其传播到一个数组中:

    [...Array(end - start + 1).keys()] // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]

    1. 映射值以创建新数组:

    [...Array(end - start + 1).keys()].map(i =&gt; i + start) // [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]

    ...这给了你这样的东西:

    const range = (n, m) => [...Array(m - n + 1).keys()].map(i => i + n);
    
    const [start, end] = [5, 50];
    
    console.log(range(start, end)); // [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
    
    

    或者,在您的问题中维护函数的 API,如下所示:

    const All = (arr) => {
        const [n, m] = arr;
        return [...Array(m - n + 1).keys()].map(i => i + n);
    }
    
    console.log(All([5, 50])); // [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
    
    

    【讨论】:

      【解决方案3】:

      Array.prototype.push 方法会改变原始数组,因此重新分配没有意义。 做吧:

      newArray.push(i);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        相关资源
        最近更新 更多