2016-08-29 5 views
0
に部分配列のすべての子を取得する方法

だからここに私の問題だ:Javascriptを

だから、これは私の配列が、私は(コンソールウィンドウから)ここでの断片を示しているように見えるものですが。

Array

それは全体的にかなり基本的な権利ですか?インデックス作成を除いて。ご覧のとおり、最初の値は"1"で、2番目の値は"4"です。サブアレイについては、カスタムインデックスもあります。

したがって、昔ながら:

for(i=0; i<array.length; i++){ 
    someVar = array[i]; 
    //do something 
} 

が動作しません。

私は1または4を別の配列で反復処理するので、それらを取得する必要はありません。

私はすべてのsubArraysを取得したい(それ以上ネストされたサブアレイではなく、第2レベルのみ)。

array[someIndex].children.forEach(
    //do something with **this** 
) 

あなたのためにそれをより実用的にするために: だから私は、最初の配列がindex 1を持っていることを知っているのでbasicly私が欲しいもの

は、この(?このようなものがある)のようなものです。 cat1cat2の値を取得するには、index 2(これは6または42など)でもかまいません。この場合、最初の配列には1つのsubArrayしかありませんが、複数のsubArrayで動作させたいと思います。 (明確にするために、index 2を含む第2レベルのサブアレイからcat1cat2を選択してください)

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

evoc

+0

*「私は例えば、この1を作ったので、それは非常に正確ではないかもしれないが、私はあなたが働くことを願ってそれで "*本当に。 JavaScriptでは、 '[entry0、entry1、entry2]'を使って**配列**を定義します。 (例えば、[1,2,3]や[["a"、 "b"、 "c"] 'や' [1、 "b"、32.4] 'など)**オブジェクト**を '{key1:value1、key2:value2}'と置き換えます。だから正しい配列対オブジェクト記法を使って質問を更新してください。さもなければ、人々は推測する必要があります。 –

+0

キーを配列に追加してください。 –

+0

2番目のレベルの数値以外のプロパティのみが必要だったとおっしゃいましたか?まあ 'msg1'は第3レベルにありますので、あなたは何を探していますか? – kamoroso94

答えて

2

これらは配列ではありません。あなたは持っています

[ { "1": { etc... 

これは、複数の他のオブジェクトを含むオブジェクトを含む配列です。キーが連続していないので、実際にはfor(i=...)ループを使用することはできません。最小から最大まで、最初の整数インデックスで注文したプロパティを取得するために

arr = [{"1":{....}}]; 

for (i in arr[0]) { 
    for (j in arr[0][i]) { 
     console.log(arr[0][i][j]['msg']); 
    } 
} 
+0

技術的には彼はおそらく配列を持っていますが、おそらくその方法で使用するつもりはありません。 – Aaron

+1

for inは反復の順序を保証しません。 – Oriol

+0

ありがとう@marc、私は間違って配列を取得しました...私の悪い、私はそれのために申し訳ありません。 Ps。これはあまりにも遠い1つのレベルですが、私はポイントを得る:p – Evochrome

1

使用Object.getOwnPropertyNames:あなたは代わりにfor ... inループを使用する必要があります。反復してmsg1になるようにしてください。

var array = {"1":{"3":{"5":{"data":"someData","moreData":"someMoreData"},"msg1":"hello world","msg2":"foo equals bar"},"5":{"8":{"data":"someData","moreData":"someMoreData"},"msg1":"world hello","msg2":"bar equals foo"},"your_name":"jimmy","your_msg":"hello world"},"4":{"3":{"5":{"data":"someData","moreData":"someMoreData"},"msg1":"hello world","msg2":"foo equals bar"},"5":{"8":{"data":"someData","moreData":"someMoreData"},"msg1":"world hello","msg2":"bar equals foo"},"your_name":"billy","your_msg":"foo equals bar"}}; 
 
for(let key of Object.getOwnPropertyNames(array[1])) { 
 
    if(Object(array[1][key]) !== array[1][key]) break; 
 
    console.log('msg1 of "'+key+'": ' + array[1][key].msg1); 
 
} 
 
console.log('your_msg: ' + array[1].your_msg);

0

あなたはそれが唯一のインデックスを持つ配列の示した例では、このインデックスの中にネストされたオブジェクトがある、あなたは、プロパティイテレータ(foreachの)を使用してそれらを繰り返すことができます。あなたは必要な値がそこにあるので、第2レベルthoに行く必要があります。

for (var key in object) { 
    for(var anotherKey in object[key]) { 
     //check for undefined 
     if(object[key][anotherKey].hasOwnProperty('msg')) { 
      //code 
     } 

    } 
} 

{} - (リテラル)宣言オブジェクト

[] - 宣言配列