JS map возвращаемый объект

Я получил этот массив,

var rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];

что мне нужно сделать, чтобы вернуть сопоставленный массив, который добавляет 10 к каждому

запускает

значением, вот мой первый подход,

var launchOptimistic = rockets.map(function(elem){
  // return  elem.launches+10;
     return (elem.country, elem.launches+10);


});
console.log(launchOptimistic);

3 ответов


вы уже очень близки, вам просто нужно вернуть новый объект, который вы хотите. В этом случае тот же самый, за исключением значения запуска, увеличенного на 10:

var rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];

var launchOptimistic = rockets.map(function(elem) {
  return {
    country: elem.country,
    launches: elem.launches+10,
  } 
});

console.log(launchOptimistic);

map ракеты и добавить 10 к его запускам:

var rockets = [
    { country:'Russia', launches:32 },
    { country:'US', launches:23 },
    { country:'China', launches:16 },
    { country:'Europe(ESA)', launches:7 },
    { country:'India', launches:4 },
    { country:'Japan', launches:3 }
];
rockets.map((itm) => {
    itm.launches += 10
    return itm
})
console.log(rockets)

если вы не хотите изменить rockets вы можете сделать:

var plusTen = []
rockets.forEach((itm) => {
    plusTen.push({'country': itm.country, 'launches': itm.launches + 10})
})

если вы хотите изменить исходные объекты, то простой Array#forEach будет делать:

rockets.forEach(function(rocket) {
    rocket.launches += 10;
});

если вы хотите сохранить исходные объекты неизмененными, используйте Array#map и копировать объекты с помощью Object#assign:

var newRockets = rockets.forEach(function(rocket) {
    var newRocket = Object.assign({}, rocket);
    newRocket.launches += 10;
    return newRocket;
});