0

如果在 JavaScript 中呈现这样的对象:

var data = [
            {"Person Name": "Amy", "Age":"46", "sex":"female"}
            {"Person Name": "John", "Age":"22", "sex":"male"}
            {"Person Name": "Mike", "Age":"62", "sex":"male"}
            {"Person Name": "Gav", "Age":"undefined", "sex":"male"}
           ]

并且想找到最大年龄但也想返回索引值,即'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; 
}

调用者:

maxAgeIndex = maxIndex("Age", data);

这似乎不起作用。由于丢失了索引号,我无法对“年龄”属性上的数据对象进行排序。

4

2 回答 2

1

只有当数组元素小于您迄今为止看到的最大值时,您才更新最大值。那应该是一个大于测试:

  if (searchArray[i][property] > maxValue) {

另外,声明“i” var

for (var i = 1; i < searchArray.length; i++) {
于 2013-11-06T17:47:06.370 回答
0

如果您想使用功能方法,可以尝试以下方法:

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
})
于 2013-11-06T17:50:36.657 回答