迭代对象并替换值

Iterate Object and replace values

我有这个对象:

{
  "data": {
    "success": true,
    "historical": true,
    "date": "2022-01-01",
    "base": "MXN",
    "rates": {
      "COFFEE": 0.02158734144632395,
      "CORN": 0.008232645172711363,
      "COTTON": 0.04320921676820366,
      "SOYBEAN": 0.0036714622235960175,
      "SUGAR": 0.25680398615582695,
      "WHEAT": 0.00017592643558262669
    },
    "unit": "per bushel"
  }
}  

我想遍历“rates”以用 1 / value 替换每个键的值
我试过:(prueba 是对象名称)

Object.values(this.prueba.data.rates).forEach((val) => {
      console.log(val)
      val = 1 / val;
      console.log(val)
    })

但是如何替换这些值或者如何将它们保存在另一个数组或对象中

您的代码不起作用,因为您对 val 所做的更改仅反映在回调范围内。

您应该遍历每个 属性 并设置其值。

const obj={data:{success:!0,historical:!0,date:"2022-01-01",base:"MXN",rates:{COFFEE:.02158734144632395,CORN:.008232645172711363,COTTON:.04320921676820366,SOYBEAN:.0036714622235960175,SUGAR:.25680398615582695,WHEAT:.00017592643558262669},unit:"per bushel"}};

let r = obj.data.rates;
Object.keys(r).forEach(e => r[e] = 1 / r[e])
console.log(obj)

如果您使用的是 Typescript,则必须像这样声明对象:

const obj: {[key: string]: any} = ...

您可以遍历 Object.entries (or Object.keys) 并替换每个键的值。

let obj={data:{success:!0,historical:!0,date:"2022-01-01",base:"MXN",rates:{COFFEE:.02158734144632395,CORN:.008232645172711363,COTTON:.04320921676820366,SOYBEAN:.0036714622235960175,SUGAR:.25680398615582695,WHEAT:.00017592643558262669},unit:"per bushel"}};
Object.entries(obj.data.rates).forEach(([k, v]) => obj.data.rates[k] = 1 / v);
console.log(obj);

我认为使用 for 循环显式编写它会更清晰:

let obj = {} //original object stated in question
let obj2 = Object.create(null);//DON'T just use {}, see below
for(let productName in obj.data.rates){
   let inverse = 1/obj.data.rates[productName];
   //to edit the object directly
   obj.data.rates[productName] = inverse;
   //to add to another object
   obj2[productName] = inverse;
}

{}Object.create(null)的区别可以看here

你可以合并Object.entries(), Array#forEach() and Destructuring assignment

代码:

const obj = {data:{success:0,historical:0,date:"2022-01-01",base:"MXN",rates:{COFFEE:.02158734144632395,CORN:.008232645172711363,COTTON:.04320921676820366,SOYBEAN:.0036714622235960175,SUGAR:.25680398615582695,WHEAT:.00017592643558262669},unit:"per bushel"}}

const replaceValue = ({ data: { rates: r }}) => 
  Object
    .entries(r)
    .forEach(([k, v]) => r[k] = 1 / v)

replaceValue(obj)

console.log(obj)