使用基于属性名称的对象从数组中删除n个项目

时间:2014-07-18 14:23:37

标签: javascript arrays

我在这里有这个阵列:

result = [{ID:"97",answerA:"Apple", answerB:"Chair",category:"MEAT"} , {ID:"97",answerA:"Apple", answerB:"Chair",category:"MEAT"}];

等等。

  

到目前为止,我的数组中包含5个类别中的20个项目 - 所以   这使得每个类别有4个项目。

我想使用我的数组,使其包含:

  • 4项类别= “蔬菜”
  • 3项类别= “Fingerfood”
  • 3项类别= “海鲜”
  • 3项类别= “肉类
  • 类别= “常规”的
  • 2件

    根据上述规则,使我的数组只包含15个项目的最佳方法是什么。

PS:当然,新的重新排序的数组会遗漏5个项目。

我想过循环遍历数组并使用IF / Else语句来求助一个新的但我希望看到最好也是最简单的方法。

1 个答案:

答案 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:

  1. 根据您的需要填写计数规则集
  2. counts中的类别名称应与result
  3. 中的类别相匹配