我嵌套了将属性值添加到对象的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。