Вставка элементов в объекты из массива при совпадении - PullRequest
1 голос
/ 28 марта 2019

У меня есть массив и объект предметов, я хочу проверить каждый элемент в этом массиве, если его путь имеет это имя объекта, я помещаю его в этот массив объектов.

Пока это все хорошо, теперь, если совпадений не найдено, я хочу создать новый элемент на основе этого имени элемента массива и вставить его внутрь него!

Все мои попытки заканчиваются дублированием значения, я думаю, что мне нужен третий объект / массив, я просто больше не могу думать об этом

Чтобы объяснить лучше:

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 Ответ

1 голос
/ 28 марта 2019

Один из способов сделать это - перевернуть внутреннюю и внешнюю петли

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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...