簡體   English   中英

從單個數組轉換為 object 數組,其中鍵來自 JSON 響應 -JAVASCRIPT-

[英]From single array convert to an array of object with keys coming from a JSON response -JAVASCRIPT-

我收到來自 API 呼叫的 json 響應。 我需要存儲它的密鑰,並創建一個 object 數組。 無論響應的鍵是什么,我都打算動態創建 object 的這個數組。

我已經有了這樣的鑰匙:

  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']

但我正在嘗試使用該數組創建一個看起來像這樣的 object 數組

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

我一直在嘗試映射數組,但由於循環而獲得了多個對象,我需要一個對象才能使其工作。

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

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

任何提示都會很有用!

先謝謝了

你肯定是在正確的軌道上。 要記住的一件事是 map function 將返回 output 的相同編號作為輸入。 因此,在您的示例中,一個 3 的數組返回一個包含 3 個項目的數組。

因此,僅 map 無法滿足您的需求。 您也許可以 map => 減少它。 但是,這是一種使用 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' }

您正在尋找的是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' }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM