[英]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.