javascript - 具有非空值的唯一键
问题描述
我有一个像这样的数组:
const es = [
['A', 'A1'], // first A key
['B', null],
['C', null],
['A', null], // second A key
['B', null],
['C', null],
['D', 'D2']
]
我想要的是:
const res = {
A: 'A1',
B: null,
C: null,
D: 'D2'
}
所以我想要一个具有唯一键的对象,如果存在具有不同值的重复键(如A
、B
、 ),则键的值是非空值。C
为了得到res
我可以做的:
const res = Object.fromEntries(flatten(es))
但在这种情况下,res
是:
res = {
A: null,
B: null,
C: null
}
我认为是因为Object.fromEntries
“制造了一个set
”,而第二个A
键取代了第一个键。
那么,这是做我想做的最好的方法吗?
解决方案
你可以尝试这样的事情:
只有在以下情况下才需要设置新值:
- 值为空
null
或undefined
- 两个值都存在且有效
想法是分配第一个值并用最新的非空值替换。
const es = [
['A', 'A1'], // first A key
['B', null],
['C', null],
['A', null], // second A key
['B', null],
['C', null],
['D', 'D2']
]
const result = es.reduce((acc, [ key, value ]) => {
if (acc[ key ] == null || !!acc[ key ] && !!value) acc[key] = value;
return acc
}, {});
console.log(result)
推荐阅读
- python - 如何在命令行程序中添加中断
- ios - UIScrollView 使用 drawRect 绘制标尺
- excel - Excel和Matlab中数字求和的奇怪结果
- node.js - 如何在嵌入式 Node.js 脚本中将 Cloudformation 参数引用为变量?
- python - 给出未知名称时如何摆脱KeyError
- javascript - 将数组缩减为组
- python - 使用 docker-py 在 Azure 上运行 Docker 容器
- reactjs - 反应让道具进入孩子
- c# - 使用类 Map 的字典在 C# 中使用多态性
- react-native - 有什么办法可以将 TabBar 放在我的标题上