javascript - 具有非空值的唯一键

标签 javascript arrays object

我有一个这样的数组:

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

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

要获取 res 我可以这样做:

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

但在这种情况下,res 是:

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

我认为是因为 Object.fromEntries “创建了一个 set” 并且第二个 A 键替换了第一个。
那么,哪种方法是完成我想做的事情的最佳方式?

最佳答案

你可以尝试这样的事情:

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

  • 值为空 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)

关于javascript - 具有非空值的唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59930050/

相关文章:

javascript - 在 div 内移动图像?

javascript - Underscore.js 按字母数字顺序对对象数组进行排序

php - 将元素添加到作为对象属性的数组

javascript - 在 Internet Explorer 中使用 JS 访问对象内部的 SVG

JavaScript:如何反对字符之间的推送字符串?

javascript - 将 js 注入(inject)头部(脚本中有完整代码)

javascript - NodeJS - Controller 方法不调用

javascript - jQuery 颜色动画不跨多个元素同步

c++ - 与执行随机快速排序相关的运行时错误

c - 如何使函数返回动态分配的二维数组?