根据对象属性对JavaScript对象进行排序,但保留索引

根据对象属性对JavaScript对象进行排序,但保留索引,javascript,Javascript,如果在JavaScript中显示这样的对象: 并希望找到最大年龄,但也希望返回索引值,即“2” data[2]["Age"] 在本例中,如何编写代码?但是,我使用的数据对象包含1000多个条目,并且具有未定义的年龄值,因此需要进行搜索 到目前为止,我的解决方案是: function maxIndex(/*string*/ property, /*array*/ searchArray){ var maxIndex = 0; var maxValue = searchArra

如果在JavaScript中显示这样的对象:

并希望找到最大年龄,但也希望返回索引值,即“2”

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
})