javascript - 在数组中查找唯一对象

标签 javascript arrays object lodash

我有一个数组如下:

const arr = [
            {company: 'a', date: '1'},
            {company: 'b', date: '1'},
            {company: 'c', date: '1'},
            {company: 'a', date: '2'},
            {company: 'a', date: '1'},
            {company: 'b', date: '2'},
          ]

我只想知道如何获取其中的独特对象。我尝试通过以下命令使用 lodash:
uniqBy(arr, 'date');

但它只返回:
[
  {company: "a", date: "1"},
  {company: "a", date: "2"}
]

我想要这样的东西:
[
  {company: "a", date: "1"},
  {company: "a", date: "2"},
  {company: "b", date: "1"},
  {company: "b", date: "2"},
  {company: "c", date: "1"},
]


有没有办法在 lodash 或 vanilla JS 中完成这项工作?

最佳答案

reduce() 的帮助下在纯 js 中,我创建了一个函数,该函数将对象数组和键数组作为输入,并返回所有这些键唯一的数组。

以下是算法的步骤:

  • 首先我们需要使用 reduce() 创建一个对象。 .
  • key该对象的值将是所需键的值,每个键由 - 连接。 (我在代码注释中为每个对象提到了 keyString)。
  • 具有相同 keyString 的对象表示 keys 的给定数组的相同值只会自动出现一次,因为对象不能有重复的键
  • 最后我们使用Object.values()来创建一个数组。


  • const arr = [
                {company: 'a', date: '1'}, //keyString = "a-1"
                {company: 'b', date: '1'}, //keyString = "b-1"
                {company: 'c', date: '1'}, //keyString = "c-1"
                {company: 'a', date: '2'}, //keyString = "a-2"
                {company: 'a', date: '1'}, //keyString = "a-1"
                {company: 'b', date: '2'}, //keyString = "b-2"
                //The item at index 0 and index 4 have same keyString so only a single of them will remain in object.
              ] 
    
    const uniqueBy = (arr, keys) => {
      const obj = arr.reduce((ac, a) => {
        let keyString = keys.map(k => a[k]).join('-');
        ac[keyString] = a;
        return ac;
      }, {});
      return Object.values(obj);
    }
    
    console.log(uniqueBy(arr, ['company', 'date']))

    关于javascript - 在数组中查找唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59934985/

    相关文章:

    java - 在android中的给定字符串数组中搜索子字符串

    javascript - 如何在数组 javascript 中添加带有 id 的新 key ?

    Java 对象列出优点和缺点

    object - Fortran 派生类型 :

    javascript - 在 React.js 中使用私有(private)变量和方法有没有好的方法

    javascript - Rxjs 与 Lodash 对比? rxjs 可以替代 lodash 吗?

    javascript - Jquery Javascript 复选框选择/取消选择

    javascript - AngularJS:如果ng-model被另一个模型填充,如何使其影响?

    java - 如何在 Java 中将字符串插入二维字符串数组?

    c++ - 字符串数组,我该如何使用它?执行