假设我想遍历一个字符数组并构建一个表示每个字符出现频率的对象,例如:
const frequency = {};
const str = 'stackoverflow';
for (let i = 0; i < str.length; i++) {
frequency[str[i]] = (frequency[str[i]] + 1) || 1;
}
有了上面的内容,我们期望一个对象的形式是:
{
s: 1,
t: 1,
a: 1,
c: 1,
k: 1,
o: 2,
v: 1,
e: 1,
r: 1,
f: 1,
l: 1,
w: 1
}
现在假设我想遍历一个嵌套数组的数组,每个嵌套数组的形式都是 [id, val]
。我可以创建一个对象,这样我最终会得到多个键,每个键代表不同的 id
和一个相应的数组,以相同的简写方式填充 val
ues表格如上?
例如:
[ [1,2], [1,3], [1,5], [2,7], [3,0], [1,10] ]
{
1: [2,3,5,10],
2: [7],
3: [0]
}
是否有类似于:
const map = {};
for (let i = 0; i < list.length; i++) {
map[list[i][0]] = (map[list[i][0].push(map[list[i][1])) || [list[i][1]];
}
最佳答案
.reduce()
的函数式方法:
const list = [[1,2],[1,3],[1,5],[2,7],[3,0],[1,10]]
const x = list.reduce((a, [k, v]) => (a[k] = [...a[k] || [], v], a), {})
console.log(x)
编辑:偷了@jered 的更好的条件而不是三元
关于javascript - 初始化类型为 [key, value : Array] in shorthand form 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58424134/