Underscore.js,_. map,替换数组中的原始值

时间:2017-01-28 15:04:19

标签: javascript underscore.js

我想知道为什么'arr'中的值没有被_.map函数更改。为什么'newarr'有效?

说明: 编写一个程序,使用console.log打印1到100之间的数字。   对于三的倍数,打印“Fizz”而不是数字。对于倍数   五,打印“Buzz”而不是数字。对于倍数的数字   三个和五个,打印“FizzBu​​zz”。

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

2 个答案:

答案 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) ...