gpt4 book ai didi

javascript - 用对象变换数组

转载 作者:行者123 更新时间:2023-12-02 15:16:30 25 4
gpt4 key购买 nike

好的,我有 2 个数组:

var state = {
users: [
{id: 1, name: 'Igor'},
{id: 2, name: 'Anton'},
{id: 3, name: 'Vasya'},
{id: 4, name: 'Pete'},
{id: 5, name: 'Dan'}
],

chats: [
{id: 1, users: [1,2], owner: 1},
{id: 2, users: [1,2,3], owner: 2},
{id: 3, users: [3,4,5], owner: 5}
]
}

我需要一个函数,它返回像“chats”这样的数组,但带有实际名称,而不是 ID。到目前为止我得到了这个:

function loadChats() {
return state.chats.map(item =>
({
id: item.id,
users: item.users.map(user =>
state.users.find(usr =>
usr.id === user).name),
owner: item.owner
})
)
}

但我不认为这个解决方案很好,因为我们不需要映射所有数组,只需要映射其中的“用户”。那么有人可以建议更好的解决方案吗?我想这样做:

...  
state.chats.forEach(item =>
item.users.map(user =>
state.users.find(usr =>
usr.id === user)
)
)
...

但是我不喜欢使用forEach,有没有更好的解决方案?

最佳答案

您最好先减少用户数组,然后通过 id 直接引用人员,这样您只需循环用户数组一次。每次聊天都在数组中查找用户是没有用的。

var users = state.users.reduce(function ( map, account ) {
map[account.id] = account.name;
return map;
}, {}),
conversations = state.chats.map(function ( chat ) {
return {
'id' : chat.id,
'users' : chat.users.map(function ( id ) {
return users[id];
}),
'owner' : users[chat.owner]
};
});

关于javascript - 用对象变换数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com