根据属性名称获取所有唯一对象值的数组

时间:2018-07-26 10:46:55

标签: javascript object

如何根据属性名称获取具有所有唯一值的数组?

在我的情况下,我的对象看起来像这样,我想要一个具有唯一documentID的数组。

const file = {
  invoice: {
    invoiceID: 1,
    documentID: 5
  },
  reminders: [
    {
      reminderID: 1,
      documentID: 1
    },
    {
      reminderID: 2,
      documentID: 1
    }
  ]
}

结果应为数组[5, 1] //唯一的documentID为5和1

似乎无法在Object.values()函数中添加属性名称。

2 个答案:

答案 0 :(得分:1)

您可以使用Set获得唯一的文档ID。

const file = {
  invoice: {
    invoiceID: 1,
    documentID: 5
  },
  reminders: [
    {
      reminderID: 1,
      documentID: 1
    },
    {
      reminderID: 2,
      documentID: 1
    }
  ],
  payments: {
  documentID : 5
  }
};

var keys = Object.keys(file).map(key=>file[key].map ? file[key].map(i=>i.documentID) : file[key].documentID)

var keysFlattened= [].concat.apply([], keys);

var unique = new Set(keysFlattened);
console.log(Array.from(unique));

答案 1 :(得分:0)

我使用类似您想要的东西的东西

SELECT  CASE WHEN OriginalNumber1 LIKE '%'+ CAST(Number1 AS VARCHAR(20)) +'%' 
                   THEN Number1                 
                ELSE OriginalNumber1 END AS Num1,
        CASE WHEN  OriginalNumber2 LIKE '%'+ CAST(Number2 AS VARCHAR(20)) +'%' 
                  THEN Number2              
                ELSE OriginalNumber2 END AS Num2
FROM #Testtbl

然后,您可以简单地:const keepUniqueBy = key => (array, item) => { if (array.find(i => item[key] === i[key])) { return array; } else { return [ ...array, item ]; } };

注意:它的性能可能很差,但是对于小型阵列而言,没关系。