循环遍历数组并作为对输出(每个第二个元素的分隔符)

我有一个匿名元素的数组。 元素通过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中将所有数组元素作为对处理/输出的方法。 为每个第二个元素“做点什么”。 像这样:

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

如何才能做到这一点?

好吧,也许这是最基本的解决方案:

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

您可以将数组拆分为两元素数组的数组。

 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 

使用Array.prototype.reduce() :

 let pairs = playlist.reduce((list, _, index, source) => { if (index % 2 === 0) { list.push(source.slice(index, index + 2)); } return list; }, []); 

这为您提供了一个二维数组pairs

不是与foreach

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

一个简单的for循环,增量为2。 你可能想要确保你的数组长度足够长i + 1,以防长度不能被2整除!

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

我建议你多一点优化你的代码,这样它会更有意义,更容易出错,如果可能的话。 这也是更加面向对象的好方法!

像这样(我在这里使用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 ); }); 

正如@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/

破坏性但干净:

 while (arr.length) { const Title = arr.shift(); const Length = arr.shift(); // Do work. }