簡體   English   中英

返回具有屬性值的對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM