【问题标题】:Special Object filtering特殊对象过滤
【发布时间】:2018-10-21 01:26:06
【问题描述】:

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

我想获得一个只包含.valid == true 对象的newObject并且 确实只包含每个unique-property 的一个对象。

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)

【问题讨论】:

    标签: javascript arrays sorting object


    【解决方案1】:

    您可以创建一个Set 来保存唯一值,然后只需在Object.entries 数组上添加reduce 将尚未看到的值和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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多