我正在尝试从我的数据库中取出一个jSON编码的字符串并循环遍历这些项目,但我遇到了一些困难。这是数据库中的字符串:
["volunteers","seat_dedication_program","memberships"]
以下是代码:
//Looks for _checkbox when looping through my database fields (object dbVals) and turns it into a true jQuery array if it finds it.
if( key.search(/_checkbox/i) > 0 ) var arr = $.makeArray(dbVals[key]);
//If it is an array, loop through the array values and show them
if($.isArray(arr)==true){
$.each(arr, function(i, n){
alert(i + " : " + n);
});
}
我想要的是:
//alert
0 : volunteers
//alert
1 : seat_dedication_program etc...
我得到的是:
//alert
0 : ["volunteers","seat_dedication_program","memberships"]
我想我已经包含了所有相关数据。任何人都可以帮我弄清楚为什么会这样吗?
感谢。
答案 0 :(得分:1)
使用$ .makeArray(..)给你一个数组,其中唯一的元素是你给它的字符串。您需要将字符串解析为JavaScript对象。使用JSON2.js library进行解析,然后您的代码看起来就像这样。
var arr = JSON.parse(dbVals[key]);
if($.isArray(arr)==true){
$.each(arr, function(i, n){
alert(i + " : " + n);
});
}
答案 1 :(得分:0)
只需使用常规for循环:
for (var i=0; i<arr.length; i++) {
var n = arr[i];
alert(i + " : " + n);
}
或对于大型数组,略微优化:
for (var i=0,l=arr.length; i<l; i++) {
var n = arr[i];
alert(i + " : " + n);
}
或者如果你真的讨厌循环:
Array.prototype.each = function (callback) {
for (var index=0,l=this.length;index<l;index++) {
var item = this[index];
// index is second arg since it's optional
callback(item,index);
}
}
arr.each(function(n,i){
alert(i + " : " + n);
});
但是我建议使用for循环以避免与库修改发生冲突,或者当Firefox突然决定为数组实现自己的each
方法时(某些库已经被这种方法所困扰)。