Я могу получить все первичные и вторичные классификации через 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
.
Как мне реализовать эту функцию?