创建一个新的索引数组

时间:2018-05-04 23:51:58

标签: javascript arrays indexing

不确定为什么这不起作用。

说明:

//创建一个名为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);

3 个答案:

答案 0 :(得分:2)

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

但是这样做的方式要简洁得多:

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

答案 1 :(得分: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()])

答案 2 :(得分:1)

问题是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