在$ .each中增加数组

时间:2014-06-04 01:52:01

标签: javascript php jquery arrays

我想将一组$ .each语句组合在一起,将包含k:v对象的数组数组循环到一个$.each中,我可以递增。

从PHP返回的数组结构:包含对象的数组数组。

enter image description here

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']);
    });
}

附上以下内容:

已完成级别:

  • MyMap中
  • 未定义
  • 未定义
  • 未定义

1 个答案:

答案 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/