javascript - 在 JS 对象中查找重复值或虚假值 - Javascript

标签 javascript arrays lodash

我有一个对象,它可以包含重复值和/或虚假值。我想基于它组成一个对象数组,并根据对不区分大小写的值的检查添加一个新的 bool 属性。

这是我的:

const obj = {
  a: 'A',
  b: 'B',
  c: 'C',
  d: 'c',
  e: 'E',
  f: ''
}

console.log(Object.keys(obj).map(i => {
  return {
    key: i,
    isDuplicateOrFalsy: _.filter(
        Object.values(obj),
        j =>
        _.trimEnd(_.toLower(j)) ===
        _.trimEnd(
          _.toLower(
            obj[i]
          )
        )
      ).length > 1 ||
      !_.every(
        Object.values(obj),
        Boolean
      )
  }
}))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

预期输出:

[{
  isDuplicateOrFalsy: false,
  key: "a"
}, {
  isDuplicateOrFalsy: false,
  key: "b"
}, {
  isDuplicateOrFalsy: true,
  key: "c"
}, {
  isDuplicateOrFalsy: true,
  key: "d"
}, {
  isDuplicateOrFalsy: false,
  key: "e"
}, {
  isDuplicateOrFalsy: true,
  key: "f"
}]

请指教。

最佳答案

使用 _.toPairs() 将对象转换为 [key, value] 的条目,并按值的小写版本对它们进行分组。平面映射组,并将组中的每个条目映射回一个对象。组中长度大于 1 的任何项目都是重复项。合并对象,并使用 _.at() 以正确的顺序获取项目:

const fn = obj => _.at(
  _.merge(..._.flatMap(
    _.groupBy(_.toPairs(obj), ([, v]) => _.lowerCase(v)),
    group => group.map(([key, v]) => ( { [key]:{
      key,
      isDuplicateOrFalsy: group.length > 1 || _.isEmpty(_.trim(v))
    }}))
  )),
  _.keys(obj) 
)


const obj = {"a":"A","b":"B","c":"C","d":"C","e":"E","f":"","g":"c"}

const result = fn(obj)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

关于javascript - 在 JS 对象中查找重复值或虚假值 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65327755/

相关文章:

javascript - 使用 lodash 的递归循环

javascript - 如何用更合适的 lodash 函数替换嵌套的 foreach 循环?

node.js - 如何使用 mongoose 从数组字段中获取特定对象

javascript - 将ajax响应拆分为两个不同的div

javascript - 如何使用 iTowns2 在浏览器中渲染点云数据

ruby-on-rails - Ruby:根据 block 查找条件删除并返回数组值

c++ - 面试问题 - 帮助不大

javascript - 正则表达式不捕获方括号

javascript - 使用解析器从 javascript 中提取私有(private)函数

javascript - 为什么 arr[0] (var = first) 没有与 arr[i] (计数器变量) 进行显式比较?这里比较什么?