根据对象属性对JavaScript对象进行排序,但保留索引
如果在JavaScript中显示这样的对象: 并希望找到最大年龄,但也希望返回索引值,即“2”根据对象属性对JavaScript对象进行排序,但保留索引,javascript,Javascript,如果在JavaScript中显示这样的对象: 并希望找到最大年龄,但也希望返回索引值,即“2” data[2]["Age"] 在本例中,如何编写代码?但是,我使用的数据对象包含1000多个条目,并且具有未定义的年龄值,因此需要进行搜索 到目前为止,我的解决方案是: function maxIndex(/*string*/ property, /*array*/ searchArray){ var maxIndex = 0; var maxValue = searchArra
data[2]["Age"]
在本例中,如何编写代码?但是,我使用的数据对象包含1000多个条目,并且具有未定义的年龄值,因此需要进行搜索
到目前为止,我的解决方案是:
function maxIndex(/*string*/ property, /*array*/ searchArray){
var maxIndex = 0;
var maxValue = searchArray[0][property];
for(i=1;i<searchArray.length;i++){
if(searchArray[i][property] > maxValue){
maxValue = searchArray[i][property];
maxIndex = i;
}
}
return maxIndex;
}
这似乎不起作用。我无法对“Age”属性上的数据对象进行排序,因为我丢失了索引号 仅当数组元素小于到目前为止看到的最大值时,才更新最大值。这应该是一个大于测试:
if (searchArray[i][property] > maxValue) {
另外,用var
声明“i”:
for (var i = 1; i < searchArray.length; i++) {
for(var i=1;i
如果您想使用功能性方法,可以尝试以下方法:
var ages = data.map(function(item){return parseInt(item.Age) || 0});
var maxAge = Math.max.apply(Math, ages);
var maxAgeIndex = ages.indexOf(maxAge);
(| | 0
表示“未定义”将变为0)
或者,正如Pointy所建议的,您可以使用reduce:
var oldestPerson = data.reduce(function(memo, item){
return parseInt(memo.Age) < parseInt(item.Age) ? item : memo
})
var oldestPerson=data.reduce(函数(备忘录,项目){
返回parseInt(memo.Age)
这不可能是对象的真实外观;外部的{}
应该是方括号([]
),这使它成为一个数组。我也不知道排序与此有什么关系;你只是在寻找某个属性值最大的记录的索引,对吗?是的,没错。我还在学习JavaScript,所以有没有更简单的方法来做到这一点?没有,这看起来很好,除了我描述的错误。至少,我认为它是OK否则。最好使用.reduce()
,跟踪具有最大值的对象及其索引。哦,这可能更有趣。.更新!
var ages = data.map(function(item){return parseInt(item.Age) || 0});
var maxAge = Math.max.apply(Math, ages);
var maxAgeIndex = ages.indexOf(maxAge);
var oldestPerson = data.reduce(function(memo, item){
return parseInt(memo.Age) < parseInt(item.Age) ? item : memo
})