2017-03-09 5 views
-1

まず、この質問は既に何度か聞かれていたかもしれませんが、見つかったすべてのスレッドは私を助けませんでした。私は下の私の機能を書き換えることができれば感謝します。キーを持たずにJson配列を反復する

私はJsonオブジェクトで次の配列を持っています。

目標は「url」値を取得することです。今、私はその配列からすべての価値を得ています。私はこの配列内の各 "URL" の要素にアクセスする方法を

a = [{ 
 
    "result": [{ 
 
     "name": [ 
 
     "name" 
 
     ], 
 
     "url": [ 
 
     "www.bar.com" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 2" 
 
     ], 
 
     "url": [ 
 
     "www.bar.org" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 1" 
 
     ], 
 
     "url": [ 
 
     "www.bar.biz" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 3" 
 
     ], 
 
     "url": [ 
 
     "www.bar.jp" 
 
     ] 
 
    } 
 
    ] 
 
}]; 
 
document.getElementById("foo").innerHTML = "How to explicitly get the url value?'"; 
 
loopThrough(a); 
 

 
function loopThrough(obj) { 
 
    for (var key in obj) { 
 
    // skip loop if the property is from prototype 
 
    if (!obj.hasOwnProperty(key)) continue; 
 

 
    if (typeof obj[key] !== 'object') { 
 
     console.log(obj[key]); 
 
    } else { 
 
     loopThrough(obj[key]); 
 
    } 
 
    } 
 
}
<div id="foo"> 
 
</div>

多分もっとスマートな解決策があるかもしれません。

ありがとうございます。

答えて

2

a = [{ 
 
    "result": [{ 
 
     "name": [ 
 
     "name" 
 
     ], 
 
     "url": [ 
 
     "www.bar.com" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 2" 
 
     ], 
 
     "url": [ 
 
     "www.bar.org" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 1" 
 
     ], 
 
     "url": [ 
 
     "www.bar.biz" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 3" 
 
     ], 
 
     "url": [ 
 
     "www.bar.jp" 
 
     ] 
 
    } 
 
    ] 
 
}]; 
 
loopThrough(a); 
 

 
// Uses ES6 syntax 
 
function loopThrough(obj) { 
 
    obj[0].result.forEach(r => console.log(r.url[0])); 
 
}

+0

ありがとうございました。私はこれで3日間立ち往生した! – AppRoyale

+0

@AppRoyaleこれが正解の場合、ダニはそのままです。ありがとうございました! –

1

それを自分を試してみてください。

var a = [{ 
 
    "result": [{ 
 
     "name": [ 
 
     "name" 
 
     ], 
 
     "url": [ 
 
     "www.bar.com" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 2" 
 
     ], 
 
     "url": [ 
 
     "www.bar.org" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 1" 
 
     ], 
 
     "url": [ 
 
     "www.bar.biz" 
 
     ] 
 
    }, 
 
    { 
 
     "name": [ 
 
     "name 3" 
 
     ], 
 
     "url": [ 
 
     "www.bar.jp" 
 
     ] 
 
    } 
 
    ] 
 
}]; 
 

 
var urls=a[0].result.reduce(function(urls,it){ 
 
    return urls.concat(it.url); 
 
},[]); 
 
console.log(urls);

+0

あなたの答えはアレイで2回繰り返されます。それはOPが尋ねるもののためにあまりにも多くのビットです – Weedoze

+0

@ Weedoze私はちょうどコードをより明確にする。 –

+0

この場合、 'reduce'と' map'を使ってコードを明確にするとは思いません。しかし、それは私の考えです – Weedoze

関連する問題