在js循环中是否有类似于php mysql_fetch_array的等效方法?
在php中你可以做到:<?php
while ($row = mysql_fetch_array($result)) {
echo "my name is " . $row['name'] . " and i'm " . $row['age'] . " yeas old";
}
?>
我有这个对象/数组:
function fetch_array(arr) {
// My magic fn that dose not work well, b/c it change the orginal refence
return arr.shift();
}
var result = [{
name: "Bob",
age: 12
}, {
name: "Jim",
age: 18
}]
// And want to do:
while (row = fetch_array(result)) {
alert("my name is " + row["name"] + " And I'm " + row['age'] + " years old");
}
// returns zero :( dont want that
console.log(result.length);
答案 0 :(得分:4)
我以这种方式更改了fetch_array
功能
function fetch_array(arr) {
var i = fetch_array.i || 0;
fetch_array.i = ("undefined" === typeof arr[i])? 0 : i + 1;
return arr[i];
}
这样就不会破坏你的阵列了。我们的想法是将索引属性附加并递增到函数本身
编辑:我必须在到达数组末尾时重置索引,否则您将无法在相同(或不同)的“结果集”上多次循环,例如
while(row = fetch_array(result)){
alert("my name is " + row["name"] + " And I'm " + row['age'] + " yo");
}
while(row = fetch_array(result)){
alert("here again the name " + row["name"] + " and age: " + row['age']);
}
console.log(result.length); // returns 2;
另外注意,重置索引的条件也可以用
完成fetch_array.i = (i === arr.length)? 0 : i + 1;
答案 1 :(得分:1)
Array.shift
删除了数组的第一个元素,所以当你像这样循环遍历它时,它就是空的。
如果你想要做的只是通过它并使用数据,试试这个:
var row;
for (var i = 0, l = result.length; i < l; i++) {
row = result[i];
alert("my name is " + row["name"] + " And I'm " + row['age'] + " years old");
}
// returns 2
console.log(result.length);
或将fetch_array函数更改为此,并将其余部分保留原样:
var index = 0;
function fetch_array(arr){
return arr[index++];
}
如果你想再次遍历它,你必须将索引变量重置为0.
答案 2 :(得分:0)
您的循环中有数组项,因此您可以随时重新创建它。或者只是在使用fetch_array
功能之前复制它。
或者只是循环遍历数组。
答案 3 :(得分:0)
根据喜欢支持的浏览器,array.forEach可以是一个选项:
result.forEach(function(row) {
alert("my name is " + row["name"] + " And I'm " + row['age'] + " years old");
});
或者如果你使用jQuery:
$(result).each(function() {
var row = this;
alert("my name is " + row["name"] + " And I'm " + row['age'] + " years old");
});