Javascript 如何过滤具有保存值的对象数组

Javascript 如何过滤具有保存值的对象数组,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组 var arr = [{ name: 'ABC', class: 'A', section:'1', roll_no: '123' }, { name: 'xyz', class: 'A', section:'1', roll_no: '456' }, { name: 'AKM', class: 'B', section:'2', roll_no: '333' }, { name: 'PQR', class: '

我有一个对象数组

var arr = [{ name: 'ABC', class: 'A', section:'1', roll_no: '123' },
           { name: 'xyz', class: 'A', section:'1', roll_no: '456' },
           { name: 'AKM', class: 'B', section:'2', roll_no: '333' },
           { name: 'PQR', class: 'A', section:'1', roll_no: '444' },
           { name: 'STU', class: 'B', section:'2', roll_no: '533' },
           { name: 'JKL', class: 'B', section:'2', roll_no: '987' }];
在这里你可以看到我有
,我想找到不同的

例如,我想得到2个类A和B,以及2个部分1和2

如何在不同的数组中获得不同的值

谢谢

编辑

我期望的结果是:

var output = [{ class: 'A', section:'1'},
              { class: 'B', section:'2'}
             ];
这不是一个重复的问题,我没有使用下划线js

var arr = [{ name: 'ABC', class: 'A', section:'1', roll_no: '123' },
       { name: 'xyz', class: 'A', section:'1', roll_no: '456' },
       { name: 'AKM', class: 'B', section:'2', roll_no: '333' },
       { name: 'PQR', class: 'A', section:'1', roll_no: '444' },
       { name: 'STU', class: 'B', section:'2', roll_no: '533' },
       { name: 'JKL', class: 'B', section:'2', roll_no: '987' }];
现在,下面的arrA数组将只包含类为“A”的元素

var arrA = arr.filter((element) => element.class === 'A')
请在此处阅读有关
Array.prototype.filter
方法的更多信息:

现在,下面的arrA数组将只包含类为“A”的元素

var arrA = arr.filter((element) => element.class === 'A')
阅读有关
Array.prototype.filter
方法的更多信息,请点击此处:

使用对象和
Array.prototype.forEach()函数的解决方案:

var arr=[{name:'ABC',class:'A',section:'1',roll_no:'123'},
{名称:'xyz',类别:'A',章节:'1',卷号:'456'},
{名称:'AKM',类别:'B',章节:'2',卷号:'333'},
{名称:'PQR',类别:'A',章节:'1',卷号:'444'},
{名称:'STU',类别:'B',章节:'2',卷号:'533'},
{名称:'JKL',类别:'B',章节:'2',卷号:'987'}];
var s=新集合(),
结果=[];
arr.forEach(功能(o){
var hash=o.class+o.section;
如果(!s.has(hash)){//确保'class`+'section`值的唯一组合
push({class:o.class,section:o.section});
s、 添加(散列);
}
});
控制台日志(结果)使用对象和
Array.prototype.forEach()函数的解决方案:

var arr=[{name:'ABC',class:'A',section:'1',roll_no:'123'},
{名称:'xyz',类别:'A',章节:'1',卷号:'456'},
{名称:'AKM',类别:'B',章节:'2',卷号:'333'},
{名称:'PQR',类别:'A',章节:'1',卷号:'444'},
{名称:'STU',类别:'B',章节:'2',卷号:'533'},
{名称:'JKL',类别:'B',章节:'2',卷号:'987'}];
var s=新集合(),
结果=[];
arr.forEach(功能(o){
var hash=o.class+o.section;
如果(!s.has(hash)){//确保'class`+'section`值的唯一组合
push({class:o.class,section:o.section});
s、 添加(散列);
}
});
控制台日志(结果)我是用循环来实现的

var arr=[{name:'ABC',class:'A',section:'1',roll_no:'123'},
{名称:'xyz',类别:'A',章节:'1',卷号:'456'},
{名称:'AKM',类别:'B',章节:'2',卷号:'333'},
{名称:'PQR',类别:'A',章节:'1',卷号:'444'},
{名称:'STU',类别:'B',章节:'2',卷号:'533'},
{名称:'JKL',类别:'B',章节:'2',卷号:'987'}];
变量输出=[],过滤器=[];
包含=假;
输出推送(arr[0]);
push({class:arr[0]。类,节:arr[0]。节});
对于(变量i=1;i我是用循环来实现的

var arr=[{name:'ABC',class:'A',section:'1',roll_no:'123'},
{名称:'xyz',类别:'A',章节:'1',卷号:'456'},
{名称:'AKM',类别:'B',章节:'2',卷号:'333'},
{名称:'PQR',类别:'A',章节:'1',卷号:'444'},
{名称:'STU',类别:'B',章节:'2',卷号:'533'},
{名称:'JKL',类别:'B',章节:'2',卷号:'987'}];
变量输出=[],过滤器=[];
包含=假;
输出推送(arr[0]);
push({class:arr[0]。类,节:arr[0]。节});
对于(变量i=1;i
您可以使用reduce和Array.prototype的一些方法。因此,没有循环的ES5决策:

var distinct = arr.reduce(function(curDistinct, curItem) {
  var bFlag =  curDistinct.some(function(curDistinctItem) {
    if (curDistinctItem.class == curItem.class && curDistinctItem.section == curItem.section)
      return true;
    else
      return false;
  });
  if (!bFlag) {
    curDistinct.push({class: curItem.class, section: curItem.section});
  }
  return curDistinct;
}, []);
有关所用方法的更多信息,请阅读以下内容:

您可以使用reduce和Array.prototype的一些方法。因此,没有循环的ES5决策:

var distinct = arr.reduce(function(curDistinct, curItem) {
  var bFlag =  curDistinct.some(function(curDistinctItem) {
    if (curDistinctItem.class == curItem.class && curDistinctItem.section == curItem.section)
      return true;
    else
      return false;
  });
  if (!bFlag) {
    curDistinct.push({class: curItem.class, section: curItem.section});
  }
  return curDistinct;
}, []);
有关所用方法的更多信息,请阅读以下内容:


您只需要不同类/节的数量吗?不,我想将不同对象推送到不同的数组中。谢谢。你能发布你的预期输出/可能的副本吗?你想要的只是不同类/节的数量吗?不,我想把不同的对象推到不同的数组中。谢谢。你能把你的预期输出/可能的副本从哪里得到这个
A
???这是一个动态值。我不能硬编码。@(u Greg)你从哪里得到这个
A
???这是一个动态值。我不能硬编码。