我得到了一个带有多个子对象的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)
答案 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)