一个非常简单的问题,但是我不知道为什么下面的代码导致第一个索引为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]
答案 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]