[英]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.