我在这里有这个阵列:
result = [{ID:"97",answerA:"Apple", answerB:"Chair",category:"MEAT"} , {ID:"97",answerA:"Apple", answerB:"Chair",category:"MEAT"}];
等等。
到目前为止,我的数组中包含5个类别中的20个项目 - 所以 这使得每个类别有4个项目。
我想使用我的数组,使其包含:
2件
根据上述规则,使我的数组只包含15个项目的最佳方法是什么。
PS:当然,新的重新排序的数组会遗漏5个项目。
我想过循环遍历数组并使用IF / Else语句来求助一个新的但我希望看到最好也是最简单的方法。
答案 0 :(得分:2)
Cleanest imo将使用Array.filter()
和计数器来确定您需要的确切类别。
// these are the categories and their allowed maxCounts
var counts = {
"Vegetables": {maxCount: 4, count: 0},
"Fingerfood": {maxCount: 3, count: 0},
//...
};
// filtered is the reduced array containing just the ones you need
var filtered = result.filter(function(_item) {
var c = counts[_item.category];
// include only if allowed as per counts
if(c && c.count < c.maxCount) { c.count++; return true; }
return false;
});
PS:
counts
中的类别名称应与result