我想将一组$ .each语句组合在一起,将包含k:v
对象的数组数组循环到一个$.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
与每个{@ 1}不同,即使在它们为空时也会保持循环并添加元素。例如,
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
。知道怎么做吗?
编辑:我尝试了下面的答案,但它仍然显示undefined
已加载:
for (var i = 0; i < result.length; i++) {
$.each(result[i], function (j, allData) {
$(".completedLevels").append("<br/>"+allData['levelname']);
});
}
附上以下内容:
已完成级别:
答案 0 :(得分:0)
您实际上并没有使用任何JavaScript来告诉浏览器您想要运行&#34; $。每个&#34;命令完成一次后。
在for循环中弹出它:
for (var i = 0; i < result.length; i++) {
$.each(result[i], function (j, allData) {
// Do whatever you like in here
}
}
小提琴:http://jsfiddle.net/9fhj4/
编辑:对于记录,如果您只是处理数组,那么对于您正在执行的操作,更好的方法是在两个语句中使用:
for (var i = 0; i < result.length; i++) {
for (var j = 0; j < result[i].length, j++) {
// Do whatever you like in here
}
}
再次修改:在回复您的评论时,我尝试修改小提琴,以更准确地表示您正在使用的数据结构:http://jsfiddle.net/9fhj4/2/