我是 JavaScript 新手,所以这个问题听起来可能非常基本。
var data = [
{ Amy: {items:[{shirt: 12},{trouser: 10}] } },
{ Bill: {items:[{shirt: 10},{trouser: 11}] } },
{ Chet: {items:[{shirt: 11},{trouser: 12}] } }
];
我正在尝试编写一个函数来返回谁拥有最大数量的衬衫。所以我编写了两个这样的函数来首先获取最大值
var shirtValues = data.map(function(obj) {return obj.items[shirts]; });
var maxValue = Math.max.apply(null, shirtValues);
console.log(maxValue);
现在我需要找出谁是拥有最多衬衫的人。如何实现这一目标?
最佳答案
我将从更改您的数据结构开始。如果不进行过多的迭代,很难看出当前的格式对于迭代、聚合、获取用户名、获取项目名称等会非常有用。
这是一种更容易使用的替代数据结构,因为它没有嵌套数组,并且不需要 Object.keys
来一致地访问您需要的数据(例如用户名) :
var data = [{
user: 'Amy',
items: {
shirt: 12,
trouser: 10
}
}, {
user: 'Bill',
items: {
shirt: 10,
trouser: 11
}
}, {
user: 'Chet',
items: {
shirt: 11,
trouser: 12
}
}];
使用这种格式,您可以轻松地按特定商品数量进行排序:
let getTopItem = (data, itemName) => {
// 1. clone the array using concat
// 2. sort by value at supplied itemName
// 3. return the first item
let sorted = data.concat().sort((a, b) => {
return b.items[itemName] - a.items[itemName];
});
return sorted.shift();
}
let topShirts = getTopItem(data, 'shirt');
console.log(topShirts.user);
编辑 - 我并不是对任何答案持消极态度,因为它们似乎都是从所呈现的数据结构中获取所需数据的正确且有用的方法 - 但看看有多少它们都需要迭代才能从对象中获取这些非常基本的数据。为您的数据选择正确的结构将为您省去很多麻烦。
关于javascript - 查找具有最大值的父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992055/