[英]How to replace values in my array of objects using key from other object in another array
我有2個對象數組
注意:狀態和原始語言不能隨時手動設置,因為它們一直在變化,這些是自定義字段。 來自字段的段構成所有自定義字段。
const items = [
{
name: 'Surviving the Game',
status: 'ffdb29ba075fcbc0b71295c31a13d64f',
original-language: 'b4ebbe06702794d1cf375274197267b2',
},
{
name: 'Some Movie',
status: 'cd53c082c6ca9e7d3ec66890e66c01f3',
original-language: '7a1cac74217747933bb3915888dea090',
},
];
const fields = [
{
slug: 'status',
options: [
{
name: 'Released',
id: 'ffdb29ba075fcbc0b71295c31a13d64f',
},
{
name: 'Upcoming',
id: 'cd53c082c6ca9e7d3ec66890e66c01f3',
},
],
},
{
slug: 'original-language',
options: [
{
name: 'de',
id: 'b4ebbe06702794d1cf375274197267b2',
},
{
name: 'en',
id: '7a1cac74217747933bb3915888dea090',
},
],
},
];
[項目]中的status和原始語言具有與相應字段數組中的選項匹配的id值。
我正在嘗試為[項目]返回一個新數組,其名稱來自具有匹配ID的選項。
例如:
[
{
name: 'Surviving the Game',
status: 'Released',
original-language: 'de',
},
{
name: 'Some Movie',
status: 'Upcoming',
original-language: 'en',
},
];
我將如何使用ES6 / 7做到這一點?
我不確定從哪里開始
我將通過創建一個lookup
對象來實現此目的,該對象包含您的狀態和語言的查找。 然后,在通過items
映射時可以使用此查找對象。
var items = [ { name: 'Surviving the Game', status: 'ffdb29ba075fcbc0b71295c31a13d64f', "original-language": 'b4ebbe06702794d1cf375274197267b2' }, { name: 'Some Movie', status: 'cd53c082c6ca9e7d3ec66890e66c01f3', "original-language": '7a1cac74217747933bb3915888dea090' } ]; var fields = [ { slug: 'status', options: [ { name: 'Released', id: 'ffdb29ba075fcbc0b71295c31a13d64f' }, { name: 'Upcoming', id: 'cd53c082c6ca9e7d3ec66890e66c01f3' } ] }, { slug: 'original-language', options: [ { name: 'de', id: 'b4ebbe06702794d1cf375274197267b2' }, { name: 'en', id: '7a1cac74217747933bb3915888dea090' } ] } ]; const lookup = {}; fields.forEach(field => { lookup[field.slug] = field.options.reduce((all, option) => ({ ...all, [option.id]: option.name }), {}) }); const translatedItems = items.map(item => { return Object.entries(item) .reduce((all, [key, val]) => ({ ...all, [key]: lookup[key] ? lookup[key][val] : val }),{}); }); console.log(translatedItems);
我將定義一個獲取字段值的函數,如下所示:
function valueForField(field, id) {
const field = fields.find((itemfields) => itemfields.slug === field);
if(!field) return null;
const option = field.options.find(option => option.id === id);
if(!option) return null;
return option.name;
}
然后可以這樣使用:
const newItems = items.map(item => {
const { name } = item;
const newItem = {name};
newItem["original-language"] = valueForField('original-language', item["original-language"]);
newItem.status = valueForField('status', item.status);
return newItem;
});
使用map
創建具有name
, status
和originalLanguage
字段以及find
方法的新對象數組, name
從每個status
標識符的fields
獲取name
。
const items = [{ name: 'Surviving the Game', status: 'ffdb29ba075fcbc0b71295c31a13d64f', originalLanguage: 'b4ebbe06702794d1cf375274197267b2', }, { name: 'Some Movie', status: 'cd53c082c6ca9e7d3ec66890e66c01f3', originalLanguage: '7a1cac74217747933bb3915888dea090', }, ]; const fields = [{ slug: 'status', options: [{ name: 'Released', id: 'ffdb29ba075fcbc0b71295c31a13d64f', }, { name: 'Upcoming', id: 'cd53c082c6ca9e7d3ec66890e66c01f3', }, ], }, { slug: 'original-language', options: [{ name: 'de', id: 'b4ebbe06702794d1cf375274197267b2', }, { name: 'en', id: '7a1cac74217747933bb3915888dea090', }, ], }, ], newArr = items.map(i => ({ name: i.name, status: fields.find(f => f.slug == 'status').options.find(o => o.id == i.status).name, originalLanguage: fields.find(f => f.slug == 'original-language').options.find(l => l.id == i.originalLanguage).name })); console.log(newArr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.