gpt4 book ai didi

javascript - 组合此集合的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-30 20:41:40 25 4
gpt4 key购买 nike

给定以下集合,将这些数据按房间分组并使“名称”成为数组的最佳方法是什么?排除重复项,并且不想使用调用键“名称”来使其在有更多字段时更具动态性:

var roomAssignments = [{
room: 'Foo',
name: 'Fooname',
other: 'Other'
},{
room: 'Bar',
name: 'Barname',,
other: 'OtherBar'
},{
room: 'Foo',
name: 'Baz',,
other: 'Other'
},{
room: 'Foo',
name: 'Baz',,
other: 'Other'
},{
room: 'Foo',
name: 'Bat',,
other: 'Other'
}];

期望的输出:

[{
room: 'Foo',
name: [ 'Fooname', 'Baz', 'Bat' ],
other: ['Other']
}, {
room: 'Bar',
name: [ 'Barname' ],
other: ['OtherBar']
}]

我目前正在使用 lodash,并且更喜欢它或纯 javascript。我想我已经关注这个太久了,我有大约 30 个键需要组合成数组,我正在寻找将所有键动态组合成数组的最有效方法。

最佳答案

您可以使用函数 reduce 和函数 includes 来丢弃重复值。

var roomAssignments = [{    room: 'Foo',    name: 'Fooname',    other: 'Other'},{    room: 'Bar',    name: 'Barname',    other: 'OtherBar'},{    room: 'Foo',    name: 'Baz',    other: 'Other'},{    room: 'Foo',    name: 'Baz',    other: 'Other'},{    room: 'Foo',    name: 'Bat',    other: 'Other'}],
result = Object.values(roomAssignments.reduce(function(a, c) {
if (a[c.room]) {
Object.keys(c).forEach(function(k) {
if (k === 'room') return;
if (a[c.room][k]) {
if (!a[c.room][k].includes(c[k])) a[c.room][k].push(c[k]);
} else a[c.room][k] = [c[k]];
});
} else {
a[c.room] = { room: c.room };
Object.keys(c).forEach(function(k) {
if (k === 'room') return;
a[c.room][k] = [c[k]];
});
}

return a
}, {}));

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

关于javascript - 组合此集合的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49193304/

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