【问题标题】:Create a New Index Array创建一个新的索引数组
【发布时间】:2018-10-15 12:00:02
【问题描述】:

不知道为什么这不起作用。

说明:

// 创建一个名为 indexFinder 的函数,它将遍历一个数组并返回一个新的内容索引数组,例如[243, 123, 4, 12] 将返回 [0,1,2,3]。创建一个名为“indexes”的新变量并将其设置为包含 randomNumbers 的索引。

尝试过的解决方案:

let randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0];
let indexes = [];

function indexFinder(arr){
  for(var i = 0; arr.length; i++){
    indexes.push(i);
  }

  return indexes;
}

indexFinder(randomNumbers);
console.log(indexes);

【问题讨论】:

    标签: javascript arrays indexing


    【解决方案1】:

    for 循环中没有实际条件测试,因为arr.length 在大于 0 时始终为真。

    let randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0];
    let indexes = [];
    
    function indexFinder(arr){
      for(var i = 0; i < arr.length; i++){
        indexes.push(i);
      }
    
      return indexes;
    }
    
    indexFinder(randomNumbers);
    console.log(indexes);

    但是有一种更简洁的方法:

    const randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0];
    const indexFinder = arr => arr.map((_, i) => i);
    console.log(indexFinder(randomNumbers));

    【讨论】:

    • 或者Object.keys(arr) ...虽然我猜它们是字符串,所以Object.keys(arr).map(Number)
    【解决方案2】:

    另一种方法是使用 Array.from

    const randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0];
    console.log(Array.from(randomNumbers, x => randomNumbers.indexOf(x)));

    或者我们可以使用键

    const randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0];
    console.log([...Array(randomNumbers.length).keys()])

    【讨论】:

      【解决方案3】:

      问题是for-loop 中的条件只使用arr.length,因为长度大于0 将始终为true

      另一种方法是使用函数Array.from

      let randomNumbers = [1, 3453, 34, 456, 32, 3, 2, 0],
          indexes = Array.from({length: randomNumbers.length}, (_, i) => i);
          
      console.log(indexes);

      另一种选择是获取长度,然后执行一个简单的for-loop

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多