gpt4 book ai didi

基于键和值分组的 JavaScript 对象数组

转载 作者:行者123 更新时间:2023-11-30 10:57:52 24 4
gpt4 key购买 nike

let data =  [
{news: id1, users: [{user1}, {user2}, {user3}]},
{news: id2, users: [{user2}, {user4}, {user6}]},
{news: id3, users: [{user1}, {user2}, {user4}]}
]

因此根据以上数据,我需要能够将新闻项分组以形成一个模板(让我们考虑一个模板只包含两个新闻项)。然后对于每个模板,我需要匹配相应的用户。最后,当我完成所有模板的创建后,我需要将剩余的用户映射到他们各自的新闻项目。

我在下面添加了示例输出

[id1,id2] : [user2]
[id2, id3] : [user2, user4]
[id3, id1] : [user1, user2]
[id2] : [user6]
[id1] : [user3]

我如何实现这一目标?

最佳答案

您可以采用哈希表并通过检查值的长度来构建所需的结构,如果大于 2,则采用值的组合将新组添加到结果集中,而不是给定的组。

var data = [{ news: 'id1', users: ['user1', 'user2', 'user3'] }, { news: 'id2', users: ['user2', 'user4', 'user6'] }, { news: 'id3', users: ['user1', 'user2', 'user4'] }],
cool = data.reduce((r, { news, users }) => users.reduce((o, user) => ((o[user] = o[user] || []).push(news), o), r), {}),
result = Object.entries(cool).reduce((r, [user, news]) => {
function add(k, v) {
var temp = r.find(([a]) => a.join('|') === v.join('|'));
if (!temp) r.push(temp = [v, []]);
temp[1].push(k);
}

if (news.length > 2) {
news.reduce((r, v, i, a) => r.concat(a.slice(i + 1).map(w => [v, w])), [])
.forEach(news => add(user, news));
} else {
add(user, news);
}
return r;
}, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于基于键和值分组的 JavaScript 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59269633/

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