如何在嵌套循环中遍历动态数组

时间:2019-11-22 05:06:34

标签: javascript

我嵌套了将属性值添加到对象的for循环。
下一个循环遍历的数组都由一个函数过滤,该函数将上一个循环中的数组值作为参数,但是我遇到了问题,因为我的过滤函数太慢而无法跟上我的循环。

// properties/number of properties of LISTS vary
LISTS = {
    A: [{name:"Ben",id:"123"},{name:"Jerry",id:"456"}],
    B: [{name:"Jerry",id:"456"},{name:"Susan",id:"891"}],
    C: [{name:"Dave",id:"789"},{name:"Buster",id:"321"}],
    D: [{name:"Buster",id:"321"},{name:"James",id:"235"}]
}
LISTKEYS = Object.keys(LISTS);
OBJCONTAINER = [];

function mainFunction() {
    var myObj = {};
    var filteredLists = [];

    for (var i = 0; i < LISTS[LISTKEYS[0]].length; i++) {
        myObj[LISTKEYS[0]] = LISTS[LISTKEYS[0]][i];                                                                             
        if (LISTKEYS.length > 1) {
            filteredLists = filterList(myObj,1);
            for (var j = 0; j < filteredLists.length; j++) {
                myObj[LISTKEYS[1]] = filteredLists[j];                                                                                      
                OBJCONTAINER.push(JSON.parse(JSON.stringify(myObj)));
            }
        } else {
            OBJCONTAINER.push(JSON.parse(JSON.stringify(myObj)));
        }                                           
    }
}


function filterList(myObj,index) {
    var filteredLists = [];
    for (var i = 0; i < LISTS[LISTKEYS[index]].length; i++) {
        if (!objPropToArray(myObj,"id").slice(0,index).includes(LISTS[LISTKEYS[index]][i].id)) {
            filteredLists.push(LISTS[LISTKEYS[index]][i]);
        }
    }
    return filteredLists;           
}

function objPropToArray(obj,prop) {
    var arr = [];
    for (var key in obj) {
        if (obj[key][prop] != undefined) {
            arr.push(obj[key][prop]);
        }
    }
    return arr;     
}

mainFunction();

这里的回调或承诺可以帮助我吗?
我一直陷于困境,因为我没有试图延迟另一个函数的调用,而是下一个循环的开始。

我已经更新了代码。我正在寻找的结果是OBJCONTAINER包含A和B点中名称/ id对象的所有可能组合,但是同一名称/ id对象不能同时出现在任何一个对象的A和B点中。该代码目前仅将3个对象推入OBJCONTAINER。

0 个答案:

没有答案