Фильтрация специальных объектов - PullRequest
0 голосов
/ 21 октября 2018

Я получил 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 голосов
/ 21 октября 2018

Вы можете создать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...