如何从数组中获得具有最大属性的对象
How to get object with largest property from array?
我有一个对象数组,每个对象包含其他'子对象'。我需要返回具有最大'quality'属性的子对象。
下面的代码注销所有子对象。我怎么能只退质量最好的那件呢?
var maxQuality = function(Arr) {
Arr.forEach(function(obj, index) {
Math.max.apply(Math, obj.products.map(function(subObj) {
console.log(subObj);
}))
});
},
store = [
{
products: [
{
quality: 1,
info: 'info 1'
},
{
quality: 2,
info: 'info 2'
},
{
quality: 3,
info: 'info 3'
}
]
}
],
maxQualityProduct = maxQuality(store);
您可以使用数组
上的reduce()
方法来做到这一点var products = [
{
quality: 1,
info: 'info 1'
},
{
quality: 2,
info: 'info 2'
},
{
quality: 3,
info: 'info 3'
}
];
var highest = products.reduce(function(prev, current) {
return prev.quality > current.quality ? prev : current
}, {});
console.log(highest);
注意,reduce
接受两个参数—一个是回调,第二个是您开始的初始项,称为seed。在这种情况下,由于我们只检查一个平值,因此空对象的种子将正常工作,因为当从它获取属性quality
时,它将返回undefined
,并且这将小于任何其他产品。但是,对于更复杂的结构或比较,可能需要从数组中给出一个实际的项作为种子。
虽然其他.reduce
答案可能会给你你需要的,如果存储数组包含多个对象-不确定这是否是你想要/需要的-你可以使用这个:
var maxQuality = function(storeArray) {
function highestQuality(prev, curr) {
return prev.quality > curr.quality ? prev : curr
}
return storeArray.map(function(obj) {
return obj.products.reduce(highestQuality)
}).reduce(highestQuality);
}
我想这归结为一个简单的Array.prototype.sort
的事情:
products.sort(( a, b ) => b.quality - a.quality )[ 0 ];
您可以使用以下代码片段:
var maxQuality = function(Arr) {
var result = undefined;
for (var obj of store) {
for (var product of obj.products) {
if (!result || product.quality > result.quality) {
result = product;
}
}
}
return result;
},
store = [
{
products: [
{
quality: 1,
info: 'info 1'
},
{
quality: 2,
info: 'info 2'
},
{
quality: 3,
info: 'info 3'
}
]
}
],
maxQualityProduct = maxQuality(store);
console.log(maxQualityProduct);
相关文章:
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象