![](/img/trans.png)
[英]React/Javascript - Render a List of Values Based On Same Object Keys Within an Array of Objects
[英]Objects with data into object with list of keys and values - javascript
我正在努力將數據序列化為新結構,並希望為其找到更好的解決方案。
我有來自這種結構的 API 的數據:
const filters = {
category: ['Football', 'Soccer'],
subcategory: ['Tactic', 'Frighting'],
action: ['Kicking', 'Shooting']
};
我想把它轉換成這個結構:
const options = {
category: [
{
value: 'Football',
label: 'Football'
},
{
value: 'Soccer',
label: 'Soccer'
}
],
subCategory: [
{
value: 'Tactic',
label: 'Tactic'
},
{
value: 'Frighting',
label: 'Frighting'
}
],
action: [
{
value: 'Kicking',
label: 'Kicking'
},
{
value: 'Shooting',
label: 'Shooting'
}
]
};
幫助表示贊賞! 謝謝。
使用 reduce 和 map 您可以遍歷對象並對其進行轉換。
const filters = { category: ['Football', 'Soccer'], subcategory: ['Tactic', 'Frighting'], action: ['Kicking', 'Shooting'] }; const keyConversion = { subcategory: 'subCategory' } const result = Object.entries(filters).reduce((obj, [key, arr]) => { const mappedKey = keyConversion[key] || key; obj[mappedKey] = arr.map(val => ({ name: val, value: val })); return obj; }, {}); console.log(result);
你可以這樣做:
let options = Object.keys(filters).map(key => {
return {
[key]: filters[key].map(filter => {
return {
value: filter,
label: filter
}
})
}
})
const filters = { category: ['Football', 'Soccer'], subcategory: ['Tactic', 'Frighting'], action: ['Kicking', 'Shooting'] } let options = Object.keys(filters).map(key => { return { [key]: filters[key].map(filter => { return { value: filter, label: filter } }) } }) console.log(options)
使用for..in
迭代Object
和.map
數組助手
const filters = { category: ['Football', 'Soccer'], subcategory: ['Tactic', 'Frighting'], action: ['Kicking', 'Shooting'] }; const result = {} for (key in filters) { result[key] = filters[key].map(v => ({value: v, label: v})) } console.log(result)
您可以將整個對象映射到新的[key, value]
條目,其中值是數組的映射版本。 一旦你有了新的[key, value]
對數組,你可以使用Object.fromEntries()
來構建你的結果對象:
const filters = {category: ['Football', 'Soccer'], subcategory: ['Tactic', 'Frighting'], action: ['Kicking', 'Shooting'] }; const res = Object.fromEntries(Object.entries(filters).map( ([k, arr]) => [k, arr.map(v => ({value:v, label:v}))] )); console.log(res);
謝謝大家,我終於使用了這種方式:
const { ...sportFilters } = queryData;
const filterKeys = keys(sportFilters);
const filterOptions = reduce(
filterKeys,
(acc, key) => {
return {
...acc,
[key]: map(sportFilters[key], value => ({
value,
label: value
}))
};
},
{}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.