Как подобрать первичную классификацию, в которой полностью выбрана только вторичная классификация - PullRequest
0 голосов
/ 25 сентября 2018

Я могу получить все первичные и вторичные классификации через AJAX, как это

//get all the primary classifications
categories = this.getPlatformCategories(); 

//get the secondary classifications by parentId
subCategories = this.getPlatformCategories({
  parentId: id
});

Структура первичной классификации такова

[
  {
    "id":"c13c13f310d414a1b81b19a897d8a17ff",
    "name":"super1",
    "parentId":null,
    "attrCount":0,
    "subTitle":null,
    "platformCategoryAttrList":[]
  },
  {
    "id":"c87865487492645bd8fa0acd661f4d40d",
    "name":"super2",
    "parentId":null,
    "attrCount":0,
    "subTitle":null,
    "platformCategoryAttrList":[]
   }
]

И вторичные классификации так

[
  {
    "id":"c752cb155b0a642f690f4fd6f159419fc",
    "name":"2-2",
    "parentId":"c87865487492645bd8fa0acd661f4d40d",
    "attrCount":0,
    "subTitle":null,
    "platformCategoryAttrList":[

    ]
  },
  {
    "id":"ca52d1ba7438e4b989ba76a0a5660a406",
    "name":"2-1",
    "parentId":"c87865487492645bd8fa0acd661f4d40d",
    "attrCount":0,
    "subTitle":null,
    "platformCategoryAttrList":[

    ]
  }
]

Я также могу получить все выбранные классификации, включая первичные и вторичные классификации, через AJAX.Структура выглядит следующим образом:

{
  "shopCategoryInfos":[
    {
        "categoryId":"c13c13f310d414a1b81b19a897d8a17ff",
        "name":"supper1",
        "parentId":null
    },
    {
        "categoryId":"c4b7e199595b644e7b1445c8781b7074c",
        "name":"1-1",
        "parentId":"c13c13f310d414a1b81b19a897d8a17ff"
    },
    {
        "categoryId":"c87865487492645bd8fa0acd661f4d40d",
        "name":"supper2",
        "parentId":null
    },
    {
        "categoryId":"ca52d1ba7438e4b989ba76a0a5660a406",
        "name":"2-1",
        "parentId":"c87865487492645bd8fa0acd661f4d40d"
    }
  ]
}

Теперь я хочу выбрать первичную классификацию, в которой полностью выбрана только вторичная классификация. Например, если выбранная классификация является вышеуказанной, то этопредполагается получить массив, аналогичный приведенному ниже (super1 имеет только один дочерний элемент 1-1)

[
 {
    "id":"c13c13f310d414a1b81b19a897d8a17ff",
    "name":"super1",
    "parentId":null,
    "attrCount":0,
    "subTitle":null,
    "platformCategoryAttrList":[]
  } 
]

И если выбранные классификации включают элемент 2-2, он должен получитьпустой массив.

Я пробовал вот так

async handleOpen() {
  // get all the classifications that has been selected
  const res = await this.getShopApplicationDetail({
    shopApplicationId: this.id
  });
  this.shopCategoryInfos = _.cloneDeep(res.shopCategoryInfos);

  let categories = await this.getPlatformCategories();

  let ableCategories = this.filterSel(categories, this.shopCategoryInfos);
},
filterSel(allCategory, selectedCategory) {
  let arr = [];
  allCategory.forEach(e => {
    let flag = true;
    let subArr = [];
    selectedCategory.forEach(async el => {
      if (e.id === el.categoryId && !e.parentId) {
        subArr = await this.getPlatformCategories({
          parentId: el.categoryId
        });
        flag = !this.checkSelectAll(subArr, selectedCategory);
      }
    });
    if (flag) {
      arr.push(e);
    }
  });
  return arr;
},

// check if it is selected fully
checkSelectAll(targets, checkArrs) {
  var checkid = true;
  targets.forEach(function(el) {
    var check = checkArrs.findIndex(function(element) {
      return element.categoryId === el.id;
    });
    if (check === -1) {
      checkid = false;
    }
  });
  return checkid;
}

Надеюсь, ableCategories - это то, что мне нужно, но оно не работает.Я получу все первичные классификации.Я предполагаю, что проблема во вложенном цикле, я получил неправильное значение flag.

Как мне реализовать эту функцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...