2017-09-18 7 views
1

私はJSでツリーオブジェクトを操作するのに苦労していますが、それは簡単かもしれませんが、わかりません。ここで親を保存してツリー配列を構築する

はオブジェクトです:

{ 
"100-silk": { 
    "url": "https://www.striiiipes.com/product-category/100-silk/" 
}, 
"apparel": { 
    "url": "https://www.striiiipes.com/product-category/apparel/" 
}, 
"ipad-accessories": { 
    "url": "https://www.striiiipes.com/product-category/ipad-accessories/", 
    "ipad-air": { 
     "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-air/" 
    }, 
    "ipad-mini": { 
     "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-mini/" 
    }, 
    "ipad-pro": { 
     "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/", 
     "ipad-pro-12-9": { 
      "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-12-9/" 
     }, 
     "ipad-pro-9-7": { 
      "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-9-7/" 
     } 
    } 
} 

私はすべての子供をthrought取得するには、単純な再帰関数を使用しています:

function parseCategories(a) { 
    if (typeof a === 'object') { 
     $.each(a, function (i, v) { 
      //if we only have a "url" object, then we're on last branch and can parse it 
      if (Object.keys(v).length === 1 && 'url' in v) { 
       //dosomething 
      } else { // then we need to go deeper in the tree 
       parseCategories(v); 
      } 
     }) 
    } 
} 

私もパンくずを保存するには、この機能を使用したいです次のようなオブジェクトを取得します。

"100-silk": { 
    "categories" : ["100-silk"], 
    "url": "https://www.striiiipes.com/product-category/100-silk/" 
}, 
"apparel": { 
    "categories" : ["apparel"], 
    "url": "https://www.striiiipes.com/product-category/apparel/" 
}, 
"ipad-accessories": { 
    "categories" : ["ipad-accessories"], 
    "url": "https://www.striiiipes.com/product-category/ipad-accessories/", 
    "ipad-air": { 
     "categories" : ["ipad-accessories", "ipad-air"], 
     "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-air/" 
    }, 
    "ipad-mini": { 
     "categories" : ["ipad-accessories", "ipad-mini"], 
     "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-mini/" 
    }, 
    "ipad-pro": { 
     "categories" : ["ipad-accessories", "ipad-pro"], 
     "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/", 
     "ipad-pro-12-9": { 
      "categories" : ["ipad-accessories", "ipad-pro", "ipad-pro-12-9"], 
      "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-12-9/" 
     }, 
     "ipad-pro-9-7": { 
      "categories" : ["ipad-accessories", "ipad-pro", "ipad-pro-9-7"], 
      "url": "https://www.striiiipes.com/product-category/ipad-accessories/ipad-pro/ipad-pro-9-7/" 
     } 
    } 
} 

}

したがって、ポイントは、各子と親にパンくずリストを保存することです。このオブジェクトを取得するために解析関数をどのように変更する必要がありますか?私は各ループで親も渡そうとしましたが、私は自分が望むものを得ることができません...

ここにjsfiddleを作成しました。

ありがとうございました!

+0

質問を含むようにあなたのポストをリファクタリングしてください。 – kay

答えて

1

ネストされたオブジェクトのプロパティを確認し、カテゴリ値を割り当てることができます。

実際のプロパティが配列でない場合

  • object[k]は、型がオブジェクトである場合、truthy値、及び
  • typeof object[k] === 'object'であり、
  • !Array.isArray(object[k])場合には、チェックで動作、新たな付加category

のようなそれは、カテゴリを使用して、新しいプロパティcategoryを割り当て前のレベルから実際のキーを追加します。

function updateCategory(object) {   
 
    Object.keys(object).forEach(function (k) { 
 
     if (object[k] && typeof object[k] === 'object' && !Array.isArray(object[k])) { 
 
      object[k].category = (object.category || []).concat(k); 
 
      updateCategory(object[k]); 
 
     } 
 
    }); 
 
} 
 
var data = { "100-silk": { url: "URL/100-silk/" }, apparel: { url: "URL/apparel/" }, "ipad-accessories": { url: "URL/ipad-accessories/", "ipad-air": { url: "URL/ipad-accessories/ipad-air/" }, "ipad-mini": { url: "URL/ipad-accessories/ipad-mini/" }, "ipad-pro": { url: "URL/ipad-accessories/ipad-pro/", "ipad-pro-12-9": { url: "URL/ipad-accessories/ipad-pro/ipad-pro-12-9/" }, "ipad-pro-9-7": { url: "URL/ipad-accessories/ipad-pro/ipad-pro-9-7/" } } } }; 
 

 
updateCategory(data); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

魅力のように動作するように見えますが、それがどのように完了したのか理解する必要があります!千時間ありがとう。 –

関連する問題