更改 Javascript 对象中的特定 name:value 对

Change specific name:value pair in Javascript object

我试图简单地编写一个函数,将我的 JS 对象中的 属性 值之一转换为整数 - 具体来说,将每个水果的权重 属性 从字符串 (" 200g") 到 int (200)

var basket = [
  {
    name: "apple",
    weight: "200g",
    type: "fruit"
  },
  {
    name: "bananas",
    weight: "90g",
    type: "fruit"
  },
   ];

我想写一个 fnc 将权重从 str 转换为 int,然后将整个东西保存为一个新的 JS 对象 - new_basket。 我不太确定如何在 JS 中构造函数,但我有这样的东西:

for(var i=0; i<basket.length; i++) {
    new_basket = parseInt(basket.weight);
    console.log(new_basket)
}

我看过 forEach 的示例,但它们会转换所有属性,而我只想转换所有权重。 提前致谢!

basket 是一个列表,因此您需要使用 [] 运算符访问每个对象。您可以通过以下方式完成:

var basket = [
  {
    name: "apple",
    weight: "200g",
    type: "fruit"
  },
  {
    name: "bananas",
    weight: "90g",
    type: "fruit"
  },
];

for(var i=0; i<basket.length; i++) {
    new_basket = parseInt(basket[i].weight);
    console.log(new_basket)
}

var basket = [
  {
    name: "apple",
    weight: "200g",
    type: "fruit"
  },
  {
    name: "bananas",
    weight: "90g",
    type: "fruit"
  },
   ];

basket.forEach((data,i)=>{
  data['weight']=Number(String(data['weight']).replace('g',''))
})
console.log(basket);

给你,希望这对你有帮助。如果是这样我很高兴!

basket.forEach((data,i)=>data['weight']=Number(String(data['weight']).replace('g','')));

在一行中,干净的代码对现有数组进行修改。

您需要使用 Object.assign 将新的 key/value 与原始对象合并,在新对象的内部

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

顺便说一句,使用高阶函数,如 map 可以使您的代码更具可读性并允许链接。 map 遍历一个数组,returns 一个新数组。它接受一个可以发生所有转换的回调。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

对于你的情况,你可以尝试这样的事情:

const newFruits = fruits.map(fruit => {
    return Object.assign(fruit, { weight: parseInt(fruit.weight) })
})

函数循环遍历结果,然后使用Object.assign将新的key/value与原始对象合并。

这是强制性的 ES6 [和 shorthand] 方法:

const newFruits = fruits.map(({weight, ...fruit}) => ({
    ...fruit,
    weight: +weight
})