2012-05-28 6 views
6

Anonim öğeler içeren bir dizim var. Elemanlar şöyle, php yoluyla diziye eklenir:Dizi ve çıktı olarak çiftler halinde döngü (her ikinci öğe için ayırıcı)

$playlist = array(); 

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

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

Yani dizi haline gelir:

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

Sonra ajax yazı ile jquery bu diziyi almak. Bütün bunlar iyi çalışıyor.

Şimdi, tüm dizi öğelerini javascript/jquery cinsinden çift olarak işleme/çıktılamanın bir yolunu arıyorum. Her ikinci eleman için "bir şeyler yap". Bunun gibi:

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

Bu nasıl yapılabilir? Sonra

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

o yineleme kolay olacak: Ben şöyle $playlist düzenlemek için size öneriyoruz, ancak

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

:

cevap

6

Belki de bu en temel çözüm elemanlar ile basitçe:

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

Düzgün. Teşekkür ederiz – mowgli

0

foreach ile değil.

for (var i = 0; i < array.length; i += 2) { 
    var name = array[i]; 
    var time = array[i + 1]; 
    // do whatever 
} 
+0

"foreach ile" ne anlama geliyor? –

+0

Bu "foreach" ın bu durumda kullanılacak uygun yapı olmadığı anlamına gelir. – lanzz

0

İki adımlık bir döngü için basit bir döngü. Uzunluğun 2'ye bölünemez olması durumunda, dizi uzunluğunuzun i + 1 için yeterince uzun olduğundan emin olmak isteyebilirsiniz.

for (i = 0; i+1 < array.length; i+=2) { 
    name = array[i]; 
    length = array[i+1]; 
} 
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 
    }) 
} 
0

@VisioN istemci tarafında

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/

0
üzerinde yineleme sırasında ilişkisel dizi kullanmak veya başka bir etiket ayrılmış dizi olabilir eğer daha kolay olacağını söyledi olarak

Kodunuzu biraz daha optimize etmenizi öneririm, böylece biraz daha mantıklı olur ve daha az hataya yatkın olur, eğer mümkün ise. Bu, daha fazla nesne yönelimli olmanın harika bir yoludur! Bunun gibi

(burada jQuery kullanıyorum): Sonra

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"}]; 

bunun üzerine döngü muktedir ve Sen bölünmüş kodu

array.forEach(function(data){ 
    //edit the output here 
    console.log(data.name + " " + data.time); 
}); 
2

seyir biraz daha temiz üretecektir iki elemanlı diziler dizisine dizilir.

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);}); 
0
Yıkıcı

ama temiz:

while (arr.length) { 
    const Title = arr.shift(); 
    const Length = arr.shift(); 

    // Do work. 
} 
0

Array.prototype.reduce() kullanma:

Bu, çalışmak için 2 boyutlu dizi pairs verir
let pairs = playlist.reduce((list, _, index, source) => { 
    if (index % 2 === 0) { 
     list.push(source.slice(index, index + 2)); 
    } 
    return list; 
}, []); 

.