首页 > 解决方案 > 具有非空值的唯一键

问题描述

我有一个像这样的数组:

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'
}

所以我想要一个具有唯一键的对象,如果存在具有不同值的重复键(如AB、 ),则键的值是非空值。C

为了得到res我可以做的:

const res = Object.fromEntries(flatten(es))

但在这种情况下,res是:

res = {
    A: null,
    B: null,
    C: null
  }

我认为是因为Object.fromEntries“制造了一个set”,而第二个A键取代了第一个键。
那么,这是做我想做的最好的方法吗?

标签: javascriptarraysobject

解决方案


你可以尝试这样的事情:

只有在以下情况下才需要设置新值:

  • 值为空nullundefined
  • 两个值都存在且有效

想法是分配第一个值并用最新的非空值替换。

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)


推荐阅读