猿问

array.map() 的意外结果

很简单的问题,但我不明白为什么下面的代码会在第一个索引中产生 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]


SMILET
浏览 123回答 3
3回答

弑天下

数组map接受参数为(item,index)。在您的情况下x,表示数组元素将是 1,2,3,4 等等。因此 arr[1] 将是第一个为 1 的元素,但arr[4]由于fifth索引处不存在元素而未定义。您可以替换arr[x]为 onlyx或 witharr[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);

吃鸡游戏

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

潇潇雨雨

jsmap函数迭代元素(在您的情况下)而不是索引。您的 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); 
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答