[英]return object with property value
我有以下数据:
var data = {
someData : [
{
title: "something",
color: "red",
moreInfo : [
{
title: "something else",
color: "orange",
moreInfo : [
{
title: "something more",
color: "green",
moreInfo : [
{
title: "another title",
color: "yellow"
}
]
}
]
},
{
title: "blah blah",
color: "blue"
}
]
},
{
title: "something cool",
color: "black"
}
]
};
我想运行一个函数来返回具有匹配特定值的属性的对象。 目前我有这个:
var result = data.filter(obj => {
return obj.title === "something more";
});
我希望该函数能够遍历每个对象和嵌套对象并返回具有该值的对象。 所以在这种情况下,我希望它返回:
{
title: "something more",
color: "green",
moreInfo: [
{
title: "another title",
color: "yellow"
}
]
}
如果有人可以请帮我解决这个问题。 看起来很简单,但我花了太多时间在这上面。谢谢!
您可以使用下面提到的函数递归过滤数组:
var filter = (array) => {
array.filter(obj => {
if(obj.title === "something more"){
return obj
}
if(obj.moreInfo){
filter(obj.moreInfo)
}
});
}
使用这样的递归函数:
function dig(obj, func){ let v; if(obj instanceof Array){ for(let i=0,l=obj.length; i<l; i++){ v = obj[i]; if(typeof v === 'object'){ dig(v, func); } else{ func(v, i, obj); } } } else{ for(let i in obj){ v = obj[i]; if(typeof v === 'object'){ dig(v, func); } else{ func(v, i, obj); } } } } // I don't like your sytax - but didn't fix it var data = { someData: [ { title: "something", color: "red", moreInfo: [ { title: "something else", color: "orange", moreInfo: [ { title: "something more", color: "green", moreInfo: [ { title: "another title", color: "yellow" } ] } ] }, { title: "blah blah", color: "blue" } ] }, { title: "something cool", color: "black" } ] }; function getObjByTitle(object, title){ let obj = false; dig(object, (v, k, o)=>{ if(k === 'title' && v === title){ obj = o; } }); return obj; } console.log(getObjByTitle(data, 'something more'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.