gpt4 book ai didi

javascript - 如何过滤子对象的属性并返回带有通过 Javascript 过滤器的子对象的父对象?

转载 作者:行者123 更新时间:2023-11-29 15:58:28 26 4
gpt4 key购买 nike

我想过滤 children 对象的属性,并返回带有通过过滤器的 child 的 parent 。

我尝试结合使用 Array.filter、Array.some 和 Object.values,但是一旦我使用了 Object.values,我想不出找回 key 的方法

var data = {
parent1: {
child1: {
source: true
},
child2: {
source: true
}
},
parent2: {
child3: {
source: true
},
child4: {
source: false
}
},
parent3: {
child5: {
source: false
}
}
}

我希望结果是:

var afterFilter = {
parent1: {
child1: {
source: true
},
child2: {
source: true
}
},
parent2: {
child3: {
source: true
}
}
}

最佳答案

如果您想要一个具有可重用功能的解决方案,我建议您查看此实现。

const data = {parent1:{child1:{source:true},child2:{source:true}},parent2:{child3:{source:true},child4:{source:false}},parent3:{child5:{source:false}}}

function objectMapReduce (object, map, filter) {
// iterate key-value pairs of object
return Object.entries(object).reduce(
(accumulator, [key, value]) => {
// map each value in object
const result = map(value, key, object)
// filter each mapped value
return filter(result, key, object)
? Object.assign(accumulator, { [key]: result })
: accumulator
},
// initial value of accumulator
{}
)
}

const afterFilter = objectMapReduce(
data, // map-reduce each parent in data
parent => objectMapReduce(
parent, // map-reduce each child in parent
({ source}) => ({ source }), // copy each child
({ source }) => source // keep child if source is true
),
parent => Object.keys(parent).length > 0 // keep non-empty parent
)

console.log(afterFilter)

关于javascript - 如何过滤子对象的属性并返回带有通过 Javascript 过滤器的子对象的父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55841532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com