2017-08-31 1 views
1

私は、JSON配列がどのように見えるのAjaxを経由して戻ってきた:私は、それぞれのゼロ番目のインデックスを一致させたい.each使用してjQueryのアレイ内で最初のインデックスの値を取得する()

"stuff": [["2","66%"], ["3","42%"],...

問題 この配列内の要素をループ外の変数に追加し、一致する場合はその隣のパーセンテージを返します。

これはjQueryの構文がわかりません。以下のコードを見て、それが正しいかどうかを確認してください。

var percentage = 0; 
var stuffarr = jsonobj['stuff']; 
var stuffID = jsonobj['stuff_id'] 
if (!stuffID || 0 === stuffID.length){ 
    $("#stuff-element").html("--"); 
} 
else { 
    var percentage = $.each(stuffarr, function (index, value) { 
    if(value[0] == stuffID) 
     return value[1] 
    }); 
} 
+0

var stuffID = jsonobj ['stuff_id']とは何ですか?これは別の配列ですか? – Amit

+0

文字列です(例: '' 2 "' – omrakhur

答えて

2

まず、少しの専門用語です。あなたが持つデータ構造は、いくつかのプロパティを保持するObjectです。デシリアライズした後はJSONとは関係ありません。

find()を使用して、配列の項目をstuffID変数の値で見つけることができるため、問題についてはjQueryは必要ありません。これを試してみてください:

var obj = { 
 
    "stuff": [ 
 
    ["2", "66%"], 
 
    ["3", "42%"] 
 
    ], 
 
    "stuff_id": "3" 
 
} 
 

 
var percentage = 0; 
 
var stuffArr = obj['stuff']; 
 
var stuffId = obj['stuff_id'] 
 

 
if (!stuffId || 0 === stuffId.length) { 
 
    $("#stuff-element").html("--"); 
 
} else { 
 
    percentage = stuffArr.find(function(el) { 
 
    return el[0] == stuffId; 
 
    })[1]; 
 
} 
 
    
 
console.log(percentage);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

findメソッドを使用して、返りたいものを返すことができます – LiverpoolOwen

+1

@LiverpoolOwenあなたは正しいです - ありがとう。私はその質問を誤解していましたが、OPはおそらく複数を探していました。 –

+0

また、私の悪いですが、私はelse文の中で 'percentage'変数を再初期化してはならないと思います。 – omrakhur

1

あなたは返します.each(..)関数内の関数(..)の結果を使用し、この

var percentage = stuffarr.find(function (value) { 
if(value[0] == stuffID) 
    return value[1]; 
})[1]; 
+0

オーウェン、あなたの答えはうまくいきますが、ロリーはちょっとした説明を追加したので、正しいものとしてそれを受け入れました。ありがとうございました。 – omrakhur

+0

それは十分です – LiverpoolOwen

0

return文を試してみて、 .each(..)関数の戻り値ではありません。 有効な戻り値はブーリアンであり、.each(..)関数を継続するかどうかを '指示'します。

var ret = ''; 
$(arr).each(function() { 
    var curr = $(this); 
    //console.log(curr); 
    if(curr[0] == stuffID){ 
     //console.log('>>found: ' + curr[1]); 
     ret = curr[1]; 
     //if found -> break loop 
     return false; 
    } 
}); 

コメント:

// "stuff": [{"id":"2","percent":"66%"}, {"id":"3","percent":"42%"},... 
var ret = ''; 
$(arr).each(function() { 
    var curr = this; 
    //console.log(curr.id); 
    if(curr.id == stuffID){ 
     //console.log('>>found: ' + curr.percent); 
     ret = curr.percent; 
     //if found -> break loop 
     return false; 
    } 
}); 

@LiverpoolOwenアプローチ:あなたは、これはより多くの「正しい」データ構造であり、オブジェクトを使用して検討する代わりに、内側の配列を使用しなければならない代わりに、次の構文を使用しますあなたがオブジェクトのアプローチと組み合わせて使用​​したい場合、これを行う:

arr.find(function (value) { 
if(value.id == stuffID) 
    return value; 
}).percent; 
関連する問題