2017-01-19 39 views
-1

クリックしたサブキャストの名前を返すコードがあります。ここでJavascriptサブIDから親IDを取得

は下記のデータです:

theData = { 
    "categories": [ 
     { 
      "id": "661", 
      "name": "some name", 
      "description": "some description", 
      "subcat": [ 
       { 
        "id": "662", 
        "name": "sub 1", 
        "translations": null 
       }, 
       { 
        "id": "663", 
        "name": "sub 2", 
        "translations": null 
       } 
      ], 
      "image": null 
     }, 
     { 
      "id": "657", 
      "name": "some other name", 
      "description": "", 
      "subcat": [ 
       { 
        "id": "456", 
        "name": "sub 12", 
        "translations": null 
       }, 
       { 
        "id": "656", 
        "name": "sub 15", 
        "translations": null 
       } 
      ], 
      "image": null 
     } 
    ] 
}; 

私はSUBCAT名の親IDを見つけるためにいくつかの方法が必要です。例えば

私はそれを「サブ15」を与えた場合、それは「661」を返します親IDである

私はこれをどのように行うことができますか?

+1

何を試しましたか?問題を解決して解決するために、あなたのコードとあなたの努力を見なければなりません。これは無料のコーディングサービスではありません。 – Esko

+0

'' sub 15 "' - > '" 661 "'の背後にある論理は何ですか?説明してください。 –

+0

コードの部分にはサブキャスト名しかないので...だから親IDを取得するためにそれを使用するので、親IDと一致する別のテーブルで別のクエリを実行することができます – kevinj2017

答えて

1

すべてのデータ

[fiddle][1] 

Fiddle

var input = "sub 15"; 
var id =-1; 
for(var i=0;i<theData.categories.length;i++){ 
if(theData.categories[i].subcat!=null){ 
    for(var j=0;j<theData.categories[i].subcat.length;j++){ 

    if(theData.categories[i].subcat[j].name==input){ 
    id= theData.categories[i].id; 
    break; 
    } 
    } 
} 
} 
console.log(id) 
+0

これはサブキャットに属するIDを取得しています。私は親IDを取得するためにそれを必要とします – kevinj2017

+0

これはうまく動作しますが、subcatがnullの場合はちょうど壊れます。 – kevinj2017

+0

2番目のsubcatをnullに設定してみてください: "subcat":null ...それはちょっと壊れてしまいます...壊れずに続ける必要があります – kevinj2017

2

デフォルトでは、Javascriptのオブジェクトの「親」にアクセスする方法はありません。他の任意の数のオブジェクトで参照することも、単独で参照することもできます。オブジェクトはです。

代わりに、一致するIDが見つかるまですべてのデータを繰り返し処理し、見つからなければnullを返します。このソリューションはIDがユニークなエンティティであるとみなします。そうでない場合は変更する必要があります。ことで、ここでの例です:あなたはあなたの関数はnullを返す気に入らない場合、それは-1があなたのIDのアウトオブバンドであると仮定すると、-1を返すように

function getParent(subID) { 
    for (var i in theData.categories) { 
     var parent = theData.categories[i]; 
     if ('subcat' in parent && 'length' in parent.subcat) { 
      for (var j = 0; j < parent.subcat.length; j++) { 
       if (parent.subcat[j].id === subID) { 
        return parent.id; 
       } 
      } 
     } 
    } 

    return null; 
} 

、あなたは常にそれを変更することができます。また、これはほとんど最適なソリューションではないことにも注意してください。大量のデータに対してこれを使用する場合は、より速く、より効率的な検索アルゴリズムを検討する必要があります。

0

を反復処理する必要がありますが、特定のキーとsubcat内の値を検索し、より汎用的なソリューションを、検討するかもしれない。この我々を試してみてくださいアレイ。その後、最初のオブジェクトのidのみを取ります。

function getParentId(key, value) { 
 
    return (theData.categories.filter(function (a) { 
 
     return a.subcat.some(function (b) { 
 
      return b[key] === value; 
 
     }); 
 
    })[0] || {}).id; 
 
} 
 

 
var theData = { categories: [{ id: 661, name: "some name", description: "some description", subcat: [{ id: 662, name: "sub 1", translations: null }, { id: 663, name: "sub 2", translations: null }], image: null }, { id: 657, name: "some other name", description: 0, subcat: [{ id: 456, name: "sub 12", translations: null }, { id: 656, name: "sub 15", translations: null }], image: null }] }; 
 

 
console.log(getParentId('name', 'sub 15'));

+0

私はサブキャットのIDではなく、親のIDを必要とします...ここで期待される結果は661 – kevinj2017

+0

でしょうか?661は '' sub 15''でなぜですか?この情報を質問に追加してください。 –

+0

質問に私は親のID – kevinj2017

0

これが最善の方法であるが、これは今、私はsubcatオブジェクトの各内側に名前をプッシュしています

var getSubCat = []; // create an empty array to map parent id with sub name 
var getCat = theData.categories; // get categories 
getCat.forEach(function(item) { // loop through categories 
    item.subcat.forEach(function(elem) { 
    getSubCat.push({ 
     id: item.id, // this is parent id 
     sub: elem.name // name inside each subcat object. Total 4 subcat object 
    }); 
}) 
}) 
var parentId = getSubCat.filter(function(elem){ // filter the getSubCat array 
    return elem.sub ==='sub 15' 
})[0].id // parentId is an array, we need first object so [0] 
alert(parentId) 

役に立つことを願っていないかもしれません。要件にあなたも

DEMO

+0

これは指定されたサブカットからIDを返しています...私は661になる親IDにする必要があります – kevinj2017

+0

デモを確認してください – brk

0

自分のIDをプッシュすることができ、以下のソリューションはfurkleのソリューションに似ています。しかし、ここではjsonを使ってjsonを繰り返します。

function getParent(subID) { 
    var parentId = null; 
    $.each(theData.categories, function(i, v) 
    { 
     $.each(v.subcat, function(idx, obj){ 
      if(obj.name ==subID) 
       parentId = v.id 
     }) 
    }) 
    return parentId; 
} 
関連する問題