我有一个数组和项目对象,我想检查该数组中的每个项目的路径是否具有该对象名称,然后将其推送到该对象数组中。
到目前为止,这一切都很好,现在如果找不到匹配项,我想根据该数组项名称创建一个新项并将其推入其中!
我所有的尝试都以重复的值结尾,我想我需要第三个对象/数组,我再也想不到了
更好地解释:
cList = {
"rList": {
"Significant": [
{
"Path": "Significant\\Significant Charts",
"Name": "Charts"
}
]
},
};
和
SSList = {
value: [
{
"Name": "Test long name",
"Path": "/someFolder/Test long name",
},
{
"Name": "Untitled",
"Path": "/Significant/Untitled",
}
]
};
我当前的代码
for (var cFolder in this.cList.rList) {
this.SSList.forEach((ssFile)=> {
if(ssFile.Path.indexOf(cFolder) >= 0){
this.cList.rList[cFolder].push(ssFile);
}
});
}
SSList中的第一项不会被推送,因为它不匹配,我想创建一个数组并将其推送到rList内部
var folderName = ssFile.Path.split("/");
this.cList.rList[folderName[1]].push(ssFile);
答案 0 :(得分:1)
一种方法是翻转内部和外部循环
let found = false;
this.SSList.value.forEach((ssFile) => {
for (var cFolder in this.cList.rList) {
if(ssFile.Path.indexOf(cFolder) >= 0){
found = true;
break;
}
}
if (found) {
this.cList.rList[cFolder].push(ssFile);
} else {
folderName = ssFile.Path.split("/");
if (!(folderName[1] in this.cList.rList))
this.cList.rList[folderName[1]] = [];
this.cList.rList[folderName[1]].push(ssFile);
}
found = false;
});