Javascript с использованием функции Number () внутри функции map () для преобразования строки в число - PullRequest
0 голосов
/ 09 июня 2018

Я хочу конвертировать значения imdb, данные в массиве объектов watchList.Я пытаюсь это с помощью функции карты, но это не происходит.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);

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Если вы хотите быстрое преобразование из строки в целое число, вы можете использовать оператор +.

Пример:

var newList=[];
newList=watchList.map(function(list){
    list.imdbRating = +list.imdbRating;  
    return list;
});
0 голосов
/ 09 июня 2018

Просто объявление Number не изменяет исходное значение.Если вы хотите, чтобы свойство объекта имело imdbRating значение Number, вам необходимо назначить it.

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