JS地图返回对象

man*_*urt 24 javascript dictionary

我有这个阵列,

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 }
];
Run Code Online (Sandbox Code Playgroud)

我需要做什么来返回一个映射的数组,每个数组都加10

发布会

价值,这是我的第一个方法,

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


});
console.log(launchOptimistic);
Run Code Online (Sandbox Code Playgroud)

CRi*_*ice 34

你已经非常接近了,你只需要返回你想要的新对象.在这种情况下,相同的一个除了启动值增加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);
Run Code Online (Sandbox Code Playgroud)


Hem*_*ari 18

以简单的方式使用.map而不返回.也开始使用let和const而不是var,因为更推荐let和const

const 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 }
];

const launchOptimistic = rockets.map(elem => (
  {
    country: elem.country,
    launches: elem.launches+10
  } 
));

console.log(launchOptimistic);
Run Code Online (Sandbox Code Playgroud)

  • 圆括号用于返回多行语句。 (9认同)
  • @Iorweth333因为语法 `() => {}` 使用大括号来声明函数体,所以它实际上不会返回一个对象,而是尝试将大括号的内容作为函数进行计算,并抛出语法错误。 (7认同)
  • 只有一个问题:为什么返回的对象周围需要圆括号?为什么 lambda 不能像这样返回对象: `const launchOptimistic = Rockets.map(elem => {country: elem.country, launch: elem.launches+10 } );` ? (6认同)

Emr*_*mre 11

最干净的解决方案是解构。

const rockets = [
        { country:'Russia', launches:32 },
        { country:'US', launches:23 },
        { country:'China', launches:16 },
        { country:'Europe(ESA)', launches:7 },
        { country:'India', launche`enter code here`s:4 },
        { country:'Japan', launches:3 }
    ];
    const updated = rockets.map(rocket=>{
    return {...rocket,launches:rocket.launches+10}
    });
Run Code Online (Sandbox Code Playgroud)


ibr*_*rir 9

如果你想改变原始对象,那么一个简单的方法Array#forEach就可以了:

rockets.forEach(function(rocket) {
    rocket.launches += 10;
});
Run Code Online (Sandbox Code Playgroud)

如果要保持原始对象不变,请使用Array#map并使用Object#assign以下方法复制对象:

var newRockets = rockets.map(function(rocket) {
    var newRocket = Object.assign({}, rocket);
    newRocket.launches += 10;
    return newRocket;
});
Run Code Online (Sandbox Code Playgroud)


alf*_*sin 5

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)
Run Code Online (Sandbox Code Playgroud)

如果您不想修改rockets,可以执行以下操作:

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

  • 我会注意到,这将使原始数组中的项目发生变异。 (4认同)