【问题标题】:From single array convert to an array of object with keys coming from a JSON response -JAVASCRIPT-从单个数组转换为具有来自 JSON 响应的键的对象数组 -JAVASCRIPT-
【发布时间】:2021-01-26 01:51:45
【问题描述】:

我收到来自 API 调用的 json 响应。我需要存储它的键,并创建一个对象数组。我打算不管响应的键是什么,都动态创建这个对象数组。

我已经拿到了这样的钥匙:

  const json_getAllKeys = data => {
   const keys = data.reduce((keys, obj) => (
      keys.concat(Object.keys(obj).filter(key => (
        keys.indexOf(key) === -1))
      )
    ), [])
    return keys 
}

返回一个数组(使用示例 json):

['name','username', 'email']

但我正在尝试使用该数组来创建一个看起来像这样的对象数组

[
    {
      name: "name",
      username: "username",
      email: "Email",
    }
];

我一直在尝试映射数组,但由于循环而得到多个对象,我需要一个对象才能使其工作。

keys.map(i=>({i:i}))

[
  { i: 'id' },
  { i: 'name' },
  { i: 'username' },
  { i: 'email' }
]

任何提示都会很有用!

提前致谢:D

【问题讨论】:

  • 是的,没有办法吗?
  • 有很多,但我不明白你的原始数据如何
  • 原始数据来自 json。从那里我得到了一个包含该响应键的数组!
  • 你的意思是data = ['name','username', 'email']?或keys = ['name','username', 'email'](返回,在这种情况下数据的值是多少)?这还不清楚
  • data.reduce((keys, obj) 上的代码错误,Array.reduce() 以另一种方式工作,它使用累加器

标签: javascript arrays json object reduce


【解决方案1】:

您要查找的是 Object.fromEntries,我相信它是 ECMA2019,因此在 Node >=14 中可用,如果您使用 babel,它将作为 polyfill 提供。

我不太清楚你的reduce 应该产生什么,但鉴于示例输入,我会写

const input = ['name','username', 'email'];

const result = Object.fromEntries(input.map(name => ([name, name])));
// result == { name: 'name', username: 'username', email: 'email' }

【讨论】:

    【解决方案2】:

    您绝对是在正确的轨道上。要记住的一件事是 map 函数将返回相同数量的输出作为输入。所以在你的例子中,一个 3 的数组返回一个 3 项的数组。

    因此,仅地图无法满足您的需求。您也许可以映射 => 减少它。但是,这是一种使用 forEach 的方法。这不是一个严格的函数式编程风格的解决方案,但非常简单,并且取决于用例,可能已经足够好了。

    let keys = ['name','username', 'email'] //you have this array
    const obj = {}; // empty object to hold result
    keys.forEach(i => {
        obj[i] = i;  // set the object as you want
    })
    
    console.log(obj); // log out the mutated object
    // { name: 'name', username: 'username', email: 'email' }
    

    【讨论】:

    • 把这个留在这里,因为它是一个解决方案。总的来说,虽然我认为约翰的回答是“更好”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2022-11-17
    • 2014-06-09
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多