gpt4 book ai didi

javascript - 按键对数组进行分组

转载 作者:行者123 更新时间:2023-12-04 10:32:33 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What does the construct x = x || y mean?

(12 个回答)



What does “var FOO = FOO || {}” (assign a variable or an empty object to that variable) mean in Javascript?

(7 个回答)



What is “var _gaq = _gaq || []; ” for?

(7 个回答)



JavaScript OR (||) variable assignment explanation

(12 个回答)


去年关闭。




所以我有这个数据结构:

const Array= [
{
court: 'court1',
judge: 'judge1'
},
{
court: 'court1',
judge: 'judge3'
},
{
court: 'court1',
judge: 'judge2'
},
{
court: 'court1',
judge: 'judge1'
},
{
court: 'court2',
judge: 'judge1'
},
{
court: 'court2',
judge: 'judge2'
}
]

并且应该修改成这样:
Obj = {
court1: ["judge1", "judge3", "judge2"],
court2: ["judge1", "judge2"]
}

所以最后我找到了一些决定并像这样编辑自己:
let result = Array.reduce((acc, cur) => {
acc[cur.court] = acc[cur.court] || []
if (acc[cur.court].indexOf(cur.judge) === -1) {
acc[cur.court].push(cur.judge)
}
return acc
}, Object.create(null))
console.log(result)

但我试图理解为什么这条线 acc[cur.court] = acc[cur.court] || []像这样创建一个新对象:
Obj = {
court1: [],
court2: []
}

你能解释一下吗?也许你知道更优雅的决定?
谢谢!

最佳答案

acc最初是一个空对象。内reduce回调,唯一分配给它的属性,行 acc[cur.court] = acc[cur.court] || [] , 是数组,数组是真值。

如果属性存在于 cur.court , acc[cur.court] || []将评估该属性。否则,它将评估为空数组。然后,它将结果分配给 acc[cur.court] .

在做同样的事情的同时,一种不那么令人困惑的写作方式是:

if (!acc[cur.court]) {
acc[cur.court] = [];
}

代码看起来已经很合理了,虽然我更喜欢使用 if上面的声明,因为它看起来不那么令人困惑。

另一种选择是 avoid reduce entirely当累加器始终是同一个对象时,正如有些人会争辩的那样:
const result = {};
for (const { court, judge } of Array) {
if (!result[court]) {
result[court] = [];
}
result[court].push(judge);
}

(如果可能,还可以更改 Array 变量名称,也许更改为 arr 或其他名称。它遮蔽了 window.Array ,这可能会导致混淆和错误)

关于javascript - 按键对数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60350599/

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