来自array.map()

时间:2019-06-08 12:08:57

标签: javascript

一个非常简单的问题,但是我不知道为什么下面的代码导致第一个索引为NaN?

    var arr = [1, 2, 3, 4];
    var result = arr.map(function(x) {
        if(arr[x] >= 2) {
            return arr[x] + 10;
        } else {
            return arr[x] - 10;
        }
    });

    console.log(result); // [-9, 12, 13, NaN]

6 个答案:

答案 0 :(得分:1)

数组map接受的参数为(item,index)。在您的情况下,x表示将为1,2,3,4的数组元素,依此类推。因此arr [1]将是第一个元素,为1,但是arr[4]将是未定义的,因为在fifth索引中没有任何元素。您只能用arr[x]x

替换arr[index]

var arr = [1, 2, 3, 4];
var result = arr.map(function(x, index) {
  console.log('Array element', x)
  if (arr[index] >= 2) {
    return arr[index] + 10;
  } else {
    return arr[index] - 10;
  }
});

console.log(result);

答案 1 :(得分:0)

回调的第一个参数设置为数组的元素

var arr = [1, 2, 3, 4];
var result = arr.map(function(x) {
    if(x >= 2) {
        return x + 10;
    } else {
        return x - 10;
    }
});

console.log(result)

答案 2 :(得分:0)

如果要使用索引,则在map中它是第二个参数。第一个参数是数组元素。

var arr = [1, 2, 3, 4];
var result = arr.map(function(x, i) {
    if(arr[i] >= 2) {
        return arr[i] + 10;
    } else {
        return arr[i] - 10;
    }
});

console.log(result); // [12, 13, 14, NaN]

但是,index不必访问数组元素。

var arr = [1, 2, 3, 4];
var result = arr.map(function(x, i) {
    if(x >= 2) {
        return x + 10;
    } else {
        return x - 10;
    }
});

console.log(result); // [12, 13, 14, NaN]

答案 3 :(得分:0)

js map函数迭代元素(对于您而言)而不是索引。您的x变量是迭代中的当前元素

    var arr = [1, 2, 3, 4];
    var result = arr.map(function(x) {
        if(x >= 2) {
            return x + 10;
        } else {
            return x - 10;
        }
    });
   
    console.log(result); 

答案 4 :(得分:0)

var arr = [1, 2, 3, 4];
var result = arr.map(function(val, indx) {
    if(arr[indx] >= 2) {
        return arr[indx] + 10;
    } else {
        return arr[indx] - 10;
    }
});

您需要使用索引而非值

或者您可以像专业人士一样

 const result = arr.map((val, indx) => {
      return  (val >= 2) ? val+10 : val -10       
    });

答案 5 :(得分:0)

代码中的

x实际上是在引用数组中的项,而不是索引。

您可以按照以下步骤重新编写代码:

var arr = [1, 2, 3, 4]
var result = arr.map( x => (x >= 2) ? x+10 : x-10 )
console.log(result)  // [-9, 12, 13, 14]