1

我有一个嵌套的 JSON 并希望得到结果数组,这怎么可能?关于我如何做到这一点的任何提示?我需要在循环中使用嵌套器吗?高阶函数等?我是嵌套对象的新手,任何提示或好的参考都会受到重视!

// 调用 db.save() 后,const db 会显示所需的结果。我希望它包含日期、符号(美元等)和它的价值——所有这些都包含在它们自己的对象中

const db = [
{ Date: '1999-01-05', AUD: 1.8944, SEK: 9.4025, USD: 1.179 },
{ Date: '1999-01-06', AUD: 1.882, SEK: 9.305, USD: 1.1743 },

];

// 我在获取时收到的 json

const json = {
rates: {
    '1999-01-08': {
        AUD: 1.8406,
        SEK: 9.165,
        USD: 1.1659,
    },
    '1999-01-06': {
        AUD: 1.882,
        SEK: 9.305,
        USD: 1.1743,
    },
    '1999-01-07': {
        AUD: 1.8474,
        SEK: 9.18,
        USD: 1.1632,
    },
    '1999-01-05': {
        AUD: 1.8944,
        SEK: 9.4025,
        USD: 1.179,
    },
},
start_at: '1999-01-05',
base: 'EUR',
end_at: '1999-01-10',

};

4

2 回答 2

0

这是一个使用嵌套for循环和Object.entires从对象中获取键/值对的解决方案。它创建一个对象数组,就像您想要的结果一样。(不是按照确切的顺序,因为 Javascript 不关心保持对象排序)。

function save(data) {
    const db = []
    
    for (const [key, value] of Object.entries(data.rates)) {
        rate = { 'Date': key }
        for (const [_key, _value] of Object.entries(value)) {
            rate[_key] = _value
        }
        db.push(rate)
    }
    return db
}

用法; 在您发布的示例中,将是:

db = save(json)
于 2020-09-26T14:36:19.840 回答
0

感谢您的回答,我没有让它工作,因为我可能搞砸了一些事情或解释得不好,道歉。但是看到你使用嵌套的 for 循环帮助我弄清楚了这种方法,它导致从特定日期开始的每种货币和汇率都在一个只有键值的对象中。

        const db = [];
    for (const prop in json.rates) {
      Object.keys(json.rates[prop]).forEach((element) => {
        const obj = {
          date: prop,
          symbol: element,
          rate: json.rates[prop][element],
          base: json.base,
        };
        db.push(obj);
      });
    }
    console.log(db);

在此处输入代码

enter code here
于 2020-09-26T23:05:26.867 回答