匹配时从数组中推送对象

时间:2019-03-28 00:30:05

标签: arrays angular typescript sorting merge

我有一个数组和项目对象,我想检查该数组中的每个项目的路径是否具有该对象名称,然后将其推送到该对象数组中。

到目前为止,这一切都很好,现在如果找不到匹配项,我想根据该数组项名称创建一个新项并将其推入其中!

我所有的尝试都以重复的值结尾,我想我需要第三个对象/数组,我再也想不到了

更好地解释:

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);

1 个答案:

答案 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;
});