特殊对象过滤

时间:2018-10-21 01:26:06

标签: javascript arrays sorting object

我得到了一个带有多个子对象的js对象,它们都以相同的方式构建。它们包含“ valid”和“ unique”属性。

我想得到一个newObject,其中仅包含.valid == true个对象,而 的每个unique属性只包含一个对象。

let object = {                                   let object = { 
  test1: {                                         test1: {
    valid: true,                                     valid: true,
    unique: "123"                                    unique: "123"
  },                                               },    
  test2: {                                         test5: { 
    valid: true,       -->                           valid: true,  
    unique: "123"                                    unique: "321" 
  },                                               }
  test3: {                                       }  
    valid: false,
    unique: "431"
  }, 
  test5: { 
    valid: true, 
    unique: "321"    
  }   
}     

到目前为止,这是我所得到的,但我不知道如何继续删除重复项。

let object = {
  test1: {
    valid: true,
    unique: "123"
  },
  test2: {
    valid: true,
    unique: "123"
  },
  test3: {
    valid: false,
    unique: "431"
  },
  test5: {
    valid: true,
    unique: "321"
  }
}

Object.filter = (obj, predicate) => Object.keys(obj).filter(key => predicate(obj[key])).reduce((res, key) => (res[key] = obj[key], res), {});

let newObject = Object.filter(object, function(item) { return item.valid }) 
console.log(newObject)

1 个答案:

答案 0 :(得分:3)

您可以创建一个Set来保存唯一值,然后仅在reduce数组上Object.entries上添加未见且valid的值。对象:

let obj = {test1: {valid: true,unique: "123"},test2: {valid: true,unique: "123"},test3: {valid: false,unique: "431"},test5: { valid: true, unique: "321"}   }     
  
let seen = new Set
let filtered = Object.entries(obj).reduce((obj,[key, value]) => {
    if (!seen.has(value.unique) && value.valid){
        seen.add(value.unique)
        obj[key] = value
    }
    return obj
}, {})

console.log(filtered)