为了账号安全,请及时绑定邮箱和手机立即绑定

array.map() 的意外结果

array.map() 的意外结果

SMILET 2021-06-21 17:12:26
很简单的问题,但我不明白为什么下面的代码会在第一个索引中产生 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]
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

数组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);


查看完整回答
反对 回复 2021-06-24
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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       

    });


查看完整回答
反对 回复 2021-06-24
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-06-24
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信