8

匿名要素を持つ配列があります。要素は、次のように php を介して配列に追加されます。

$playlist = array();

while (databaseloop) {
  $playlist[] = $a_title;
  $playlist[] = $a_length;
}

echo json_encode(array('playlist'=>$playlist));

したがって、配列は次のようになります。

["Hello.mp3", "00:00:14", "Byebye.mp3", "00:00:30", "Whatsup.mp3", "00:00:07", "Goodnight.mp3", "00:00:19"] and so on

次に、ajax post を使用して jquery でこの配列を取得します。すべて正常に動作します。

今、javascript/jquery ですべての配列要素をペアとして処理/出力する方法を探しています。2番目の要素ごとに「何かをする」。このような:

foreach (two_elements_in_array) {
  // output track name
  // output track time
  // output some divider
}

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

4

9 に答える 9

7

おそらく、これが最も基本的な解決策です。

for (var i = 0; i < arr.length; i += 2) {
    var title = arr[i];
    var len = arr[i+1];
}

ただし、$playlist次のように配置することをお勧めします。

while (databaseloop) {
    $playlist[] = array(
        "title" => $a_title,
        "length" => $a_length
    );
}

次に、要素を単純に反復するのは簡単です:

for (var i = 0; i < arr.length; i++) {
    var title = arr[i]['title'];
    var len = arr[i]['length'];
}
于 2012-05-28T14:53:10.853 に答える
2

配列を 2 要素配列の配列に分割できます。

var arr = ["Hello.mp3", "00:00:14", "Byebye.mp3", "00:00:30", "Whatsup.mp3", "00:00:07", "Goodnight.mp3", "00:00:19"];
arr.map(function(elem,i,arr){return [elem, (i+1<arr.length) ? arr[i+1] : null];})
    .filter(function(elem,i){return !(i%2);});
于 2013-05-03T16:52:57.890 に答える
0

インクリメントが 2 の単純な for ループ。長さが 2 で割り切れない場合に備えて、配列の長さが i+1 に対して十分な長さであることを確認することをお勧めします。

for (i = 0; i+1 < array.length; i+=2) {
  name = array[i];
  length = array[i+1];
}
于 2012-05-28T14:54:33.260 に答える
0
var arr = ["Hello.mp3", "00:00:14", "Byebye.mp3", "00:00:30", "Whatsup.mp3", "00:00:07", "Goodnight.mp3", "00:00:19"];

var group = [];
for (var x = 0; x < arr.length; x += 2) {
    var track = arr[x],
        length = arr[x + 1];
    group.push({
       track: track,
       length: length
    })
}
于 2012-05-28T14:56:13.863 に答える
0

@VisioNが言ったように、連想配列を使用すると簡単になるか、クライアント側で反復しながらラベルの個別の配列を使用できます

var d=["Hello.mp3", "00:00:14", "Byebye.mp3", "00:00:30", "Whatsup.mp3", "00:00:07", "Goodnight.mp3", "00:00:19"] ;
var e=["name","time"];
var c=0;
$.each(d,function(i,j){
    if(c>=2)c=0;
    console.log(e[c]+j);
    c++;
});

http://jsfiddle.net/FmLYk/1/

于 2012-05-28T15:00:36.903 に答える
0

可能であれば、コードをもう少し最適化して、もう少し意味があり、エラーが発生しにくくなるようにすることをお勧めします。これは、よりオブジェクト指向になるための優れた方法でもあります。

このように(ここではjQueryを使用しています):

var array = [ {name: "Hello.mp3", time: "00:00:14"}, {name: "Byebye.mp3", time:"00:00:30"}, {name: "Whatsup.mp3", time: "00:00:07"}, {name: "Goodnight.mp3", time: "00:00:19"}];

次に、それをループして、もう少しきれいなコードを生成できます

array.forEach(function(data){
    //edit the output here
    console.log(data.name + " " + data.time );  
});
于 2012-05-28T15:00:58.390 に答える
0

ではありませんforeach

for (var i = 0; i < array.length; i += 2) {
    var name = array[i];
    var time = array[i + 1];
    // do whatever
}
于 2012-05-28T14:53:11.257 に答える