循环遍历数组并成对输出(每个第二个元素的除法器)
Posted
技术标签:
【中文标题】循环遍历数组并成对输出(每个第二个元素的除法器)【英文标题】:Looping through array and output as pairs (divider for each second element) 【发布时间】:2012-06-02 22:25:10 【问题描述】:我有一个包含匿名元素的数组。元素通过 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
如何做到这一点?
【问题讨论】:
【参考方案1】:嗯,也许这是最基本的解决方案:
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'];
【讨论】:
【参考方案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););
【讨论】:
【参考方案3】:使用Array.prototype.reduce():
let pairs = playlist.reduce((list, _, index, source) =>
if (index % 2 === 0)
list.push(source.slice(index, index + 2));
return list;
, []);
这为您提供了一个二维数组pairs
。
【讨论】:
【参考方案4】:不适用于foreach
。
for (var i = 0; i < array.length; i += 2)
var name = array[i];
var time = array[i + 1];
// do whatever
【讨论】:
“不带foreach”是什么意思? 这意味着foreach
不适合在这种情况下使用。【参考方案5】:
一个增量为 2 的简单 for 循环。您可能需要确保您的数组长度足以容纳 i+1,以防长度不能被 2 整除!
for (i = 0; i+1 < array.length; i+=2)
name = array[i];
length = array[i+1];
【讨论】:
【参考方案6】: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
)
【讨论】:
【参考方案7】:如果可能的话,我建议您进一步优化您的代码,使其更有意义并且不易出错。 这也是更加面向对象的好方法!
像这样(我在这里使用 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 );
);
【讨论】:
【参考方案8】:正如@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/
【讨论】:
【参考方案9】:破坏性,但干净:
while (arr.length)
const Title = arr.shift();
const Length = arr.shift();
// Do work.
【讨论】:
以上是关于循环遍历数组并成对输出(每个第二个元素的除法器)的主要内容,如果未能解决你的问题,请参考以下文章