【发布时间】:2014-06-04 01:52:01
【问题描述】:
我想将一组循环遍历包含 k:v 对对象的数组数组的 $.each 语句组合成一个可以递增的 $.each。
PHP返回的数组结构:包含对象的数组数组。
PHP:这是运行然后发送回 JavaScript 的内容。
array_push($allDataArray, $completedLevelData, $completedQuestData, $completedNPCData);
JavaScript:
我最初使用单独的 $.each 来循环遍历每个对象数组。但我想将这些 $.each 语句合并成更小的东西:
function updateData (functionToRun, callback) {
$.getJSON("phpscripts.php", {
"_player" : Player,
"_playerID" : UserID,
"_functionToRun" : functionToRun
},
function(result) {
var questIDs = [];
$.each(result[0], function (i, allData) {
$(".completedLevels").append("<br/>"+allData['levelname']);
});
$.each(result[1], function (i, allData) {
questIDs.push(allData['quest_id']);
$(".completedQuests").append("<br/>"+allData['quest_id']+ ", " + allData['questname']);
});
$.each(result[2], function (i, allData) {
$(".completedNPCs").append("<br/>"+allData['npc_name']);
});
etc...
为此,我只是要循环使用for 并追加...但for 与每个不同,即使它们为空,也会继续循环和添加元素。例如,
for (obj in result) {
for (obj2 in result[obj]) {
console.log(result[obj][obj2]['levelname']);
}
}
给予:
mymap2
mymap
(9) undefined
[]
所以即使没有数据它也会继续循环。我不希望它那样做。
话虽如此,然后我尝试了$.each,并尝试在父数组循环遍历所有子数组时递增父数组。基本上是在模仿上面,但是将所有$.each 合并为一个$.each,如下所示:
var k = 0, j = 0;
$.each(result[k], function (i, allData) {
//if you loop through all objects within parent object, move to next parent object
if (j == result[k].length) {
k++;
j=0;
}
j++;
etc...
但它只会在循环遍历所有 result[0] 后停止,而不增加 k。知道怎么做吗?
编辑:我尝试了下面的答案,但它仍然显示undefineds 正在加载:
for (var i = 0; i < result.length; i++) {
$.each(result[i], function (j, allData) {
$(".completedLevels").append("<br/>"+allData['levelname']);
});
}
附加以下内容:
已完成关卡:
- 我的地图
- 未定义
- 未定义
- 未定义
【问题讨论】:
-
您是否有机会对您的数据执行 JSON 字符串化并将结果放入您的问题中?它将允许我使用相同的数据集进行测试。
-
看起来简化了
result[1]和result[2]中的数组不包含带有.levelnames 的对象,而是带有.quest_ids 和.npc_names 的对象。难怪你在尝试访问levelname时会得到undefined。顺便说一句,don't usefor inloops on arrays.
标签: javascript php jquery arrays