Reputation:
I got an js-object with multiple child object that all are build the same way. They contain a "valid
" and a "unique
" property.
I want to get a newObject
that just includes .valid == true
objects and does just contain a single object for every 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"
}
}
This is what I've got so far but I do not know how to go on removing the duplicates.
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)
Upvotes: 0
Views: 51
Reputation: 92450
You can create a Set
to hold unique values and then just reduce
over the Object.entries
array adding the values that haven't been seen and are valid
to the object:
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)
Upvotes: 3