[英]Array of objects structuring and key replacing
I have an array of objects like this (Data): 我有一个这样的对象数组(数据):
[
{content: someString, tag: someString, data: someString, author: someId},
{content: someString, tag: someString, data: someString, author: someId},
{content: someString, tag: someString, data: someString, author: someId},
{content: someString, tag: someString, data: someString, author: someId},
]
I have another array of object like this (UserData): 我有另一个像这样的对象数组(UserData):
[
{author: someId, firstName: someString, lastName: someString},
{author: someId, firstName: someString, lastName: someString},
]
What i want is an object like this: 我想要的是这样一个对象:
{
authorFullName: [{content: someString, tag: someString, date: someString},
{content: someString, tag: someString, date: someString}],
authorFullName: [{content: someString, tag: someString, date: someString},
{content: someString, tag: someString, date: someString}]
}
I know I can restructure and make an object with the Data as the array and the authorID as the key like this: 我知道我可以使用Data作为数组重构并创建一个对象,并将authorID作为键,如下所示:
const newObject = OldArrayOfObjects.reduce((result, item) => ({
...result,
[item.author]: [
...(result[item.author] || []),
{ content: item.content, tag: item.tag, date: item.date },
],
}), {});
But how do i also replace the authorId with with the full name from the UserData array?? 但是我如何用UserData数组中的全名替换authorId? Working with objects and arrays like this is hard..
使用像这样的对象和数组很难..
You can use reduce()
, filter()
and map()
methods to get desired result. 您可以使用
reduce()
, filter()
和map()
方法来获得所需的结果。
var data = [ {content: '1someString', tag: 'someString', data: 'someString', author: 1}, {content: '2someString', tag: 'someString', data: 'someString', author: 2}, {content: '3someString', tag: 'someString', data: 'someString', author: 2}, {content: '4someString', tag: 'someString', data: 'someString', author: 1}, ] var users = [ {author: 1, firstName: 'aFirst', lastName: 'aLast'}, {author: 2, firstName: 'bFirst', lastName: 'bLast'}, ] var result = users.reduce(function(r, e) { var name = `${e.firstName} ${e.lastName}`; r[name] = data.filter(a => a.author == e.author) .map(({content, tag, data}) => ({content, tag, data})) return r; }, {}) console.log(result)
var dummy = [
{ content: 'sudo', tag: 'sudo', data: 'sudo', author: 1 },
{ content: 'sudo', tag: 'sudo', data: 'sudo', author: 2 },
{ content: 'sudo', tag: 'sudo', data: 'sudo', author: 1 },
{ content: 'sudo', tag: 'sudo', data: 'sudo', author: 2 },
];
var test = [
{ author: 1, firstName: 'ragav simha', lastName: 'ss' },
{ author: 2, firstName: 'ragav ', lastName: 'ragavmm ' },
];
const result = test.reduce((acc, item) => {
const newArray = dummy.filter((elem) => {
return elem.author == item.author
});
const username = `${item.firstName} ${item.lastName}`;
acc[username] = newArray;
return acc;
}, {});
console.log(result);
result 结果
{ 'ragav simhass':
[ { content: 'sudo', tag: 'sudo', data: 'sudo', author: 1 },
{ content: 'sudo', tag: 'sudo', data: 'sudo', author: 1 } ],
'ragav ragavmm ':
[ { content: 'sudo', tag: 'sudo', data: 'sudo', author: 2 },
{ content: 'sudo', tag: 'sudo', data: 'sudo', author: 2 } ] }
You could take a Map
for keeping the same reference to an array for each author. 您可以使用
Map
为每个作者保持对数组的相同引用。
var data = [{ content: 'someString1', tag: '', data: 'someString1', author: 1 }, { content: 'someString2', tag: '', data: 'someString2', author: 2 }, { content: 'someString3', tag: '', data: 'someString3', author: 2 }, { content: 'someString4', tag: '', data: 'someString4', author: 1 }], authors = [{ author: 1, firstName: 'Jane', lastName: 'Goodall' }, { author: 2, firstName: 'John', lastName: 'Doe' }], map=new Map, result = Object.assign(...authors.map(({ author, firstName, lastName, values = [] }) => { map.set(author, values); return { [[firstName, lastName].join(' ')]: values }; })); data.forEach(o => map.get(o.author).push(o)); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.