我想知道为什么'arr'中的值没有被_.map函数更改。为什么'newarr'有效?
说明: 编写一个程序,使用console.log打印1到100之间的数字。 对于三的倍数,打印“Fizz”而不是数字。对于倍数 五,打印“Buzz”而不是数字。对于倍数的数字 三个和五个,打印“FizzBuzz”。
var arr = [];
for(i=1; i<101; i++){
arr.push(i);
}
var newarr=[];
_.map(arr, function(num){
if(num%5===0 && num%3===0){
num='FizzBuzz';
} else if(num%5===0){
num='Buzz';
} else if(num%3===0){num='Fizz';
} else {}
newarr.push(num);
return num;
});
console.log(newarr);
console.log(arr);
答案 0 :(得分:2)
_.map()
函数返回一个新数组。它不会修改原始数组。
如果你写了
arr = _.map(arr, function(num){
if(num%5===0 && num%3===0){
num='FizzBuzz';
} else if(num%5===0){
num='Buzz';
} else if(num%3===0){num='Fizz';
} else {}
newarr.push(num);
return num;
});
您要重新分配变量arr
,而不需要newarr
。
如果您确实要修改原始列表,请使用.each()
代替.map()
:
_.each(arr, function(num, i, arr){
if(num%5===0 && num%3===0){
num='FizzBuzz';
} else if(num%5===0){
num='Buzz';
} else
if(num%3===0){num='Fizz';
} else {}
arr[i] = num;
});
该版本明确更新数组。
答案 1 :(得分:0)
map
不会更改其参数数组;它返回结果数组。
如果您希望结果存储在同一个数组中,请明确说明:
arr = _.map(arr, function(num)
...