【问题标题】:Javascript using a function Number() inside map() function to convert string to a numberJavascript 在 map() 函数中使用函数 Number() 将字符串转换为数字
【发布时间】:2018-06-09 05:44:38
【问题描述】:

我想转换对象 watchList 数组中给出的 imdb 评级。我正在尝试使用地图功能,但它没有发生。 newList 只给出旧列表,没有任何变化。我做错了什么?

var watchList = [
                {  

                   "Metascore": "74",
                   "imdbRating": "8.8",
                   "imdbVotes": "1,446,708",
                   "imdbID": "tt1375666",
                   "Type": "movie",
                   "Response": "True"
                },
                {  
                   "Metascore": "74",
                   "imdbRating": "8.6",
                   "imdbVotes": "910,366",
                   "imdbID": "tt0816692",
                   "Type": "movie",
                   "Response": "True"
                },
                {
                   "Metascore": "82",
                   "imdbRating": "9.0",
                   "imdbVotes": "1,652,832",
                   "imdbID": "tt0468569",
                   "Type": "movie",
                   "Response": "True"
                }
];



let newList=[];
newList=watchList.map(function(list){
  Number(list.imdbRating);
  return list;
});
console.log(newList);

【问题讨论】:

  • Number(list.imdbRating); 创建一个数字...然后您忽略结果
  • 试试list.imdbRating = Number(list.imdbRating);

标签: javascript function dictionary reduce


【解决方案1】:

仅声明 Number 不会改变原始值。如果您希望对象的属性将其imdbRating 设为数字,则必须分配它。

var watchList=[{"Metascore":"74","imdbRating":"8.8","imdbVotes":"1,446,708","imdbID":"tt1375666","Type":"movie","Response":"True"},{"Metascore":"74","imdbRating":"8.6","imdbVotes":"910,366","imdbID":"tt0816692","Type":"movie","Response":"True"},{"Metascore":"82","imdbRating":"9.0","imdbVotes":"1,652,832","imdbID":"tt0468569","Type":"movie","Response":"True"}];

watchList.forEach(function(list){
  list.imdbRating = Number(list.imdbRating);
});
console.log(watchList);

请注意,在 Javascript 中对象是通过引用传递的 - 更改对象引用中的某些内容将更改原始对象,这就是我使用 forEach 而不是 .map 的原因。如果您想创建全新的对象(而不是改变原始对象),请使用对象扩展以及map

var watchList=[{"Metascore":"74","imdbRating":"8.8","imdbVotes":"1,446,708","imdbID":"tt1375666","Type":"movie","Response":"True"},{"Metascore":"74","imdbRating":"8.6","imdbVotes":"910,366","imdbID":"tt0816692","Type":"movie","Response":"True"},{"Metascore":"82","imdbRating":"9.0","imdbVotes":"1,652,832","imdbID":"tt0468569","Type":"movie","Response":"True"}];

const newList = watchList.map(({ imdbRating, ...rest }) => ({
  imdbRating: Number(imdbRating),
  ...rest,
}));
console.log(newList);

【讨论】:

  • 我要强调你(正确地)使用forEach而不是不恰当的map这一事实:p
  • 但因为让forEach 成为不必要的return 而失败。
【解决方案2】:

如果您想快速从字符串转换为整数,可以使用+ 运算符。

例子:

var newList=[];
newList=watchList.map(function(list){
    list.imdbRating = +list.imdbRating;  
    return list;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多