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
???这是一个动态值。我不能硬编码。