JSON数组,如何获取具有更高给定属性值的对象的索引?

时间:2015-03-06 13:35:33

标签: arrays json angularjs sorting

我有以下对象的JSON数组:

    var dummyData = [
        {
            hr:"10",
            dial_success_rate:"23",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"11",
            dial_success_rate:"24",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"12",
            dial_success_rate:"25",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"13",
            dial_success_rate:"26",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"14",
            dial_success_rate:"27",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"15",
            dial_success_rate:"28",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"16",
            dial_success_rate:"29",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"17",
            dial_success_rate:"30",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"18",
            dial_success_rate:"45",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"19",
            dial_success_rate:"40",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"20",
            dial_success_rate:"39",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"21",
            dial_success_rate:"55",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"22",
            dial_success_rate:"12",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
        {
            hr:"23",
            dial_success_rate:"9",
            appt_success_rate:"60",
            appt_100_numbers:"10",
        },
    ];

我想获得给定属性上具有最高值的对象的索引。

这意味着:

 $scope.getHigherItem = function(data, stat, info) {
        var selectedValues = data.map(function(x) {
            return parseFloat(x[stat]);
        });

        var i = selectedValues.indexOf(Math.max.apply(Math, selectedValues));

        var result = {};
        info.forEach(function(x) {
            result[x] = data[i][x];
        });
        return result;
    };




 console.log($scope.getHigherItem(dummyData, "dial_success_rate", ["dial_success_rate"]));

上面的示例返回更高的值,但不返回数组中对象的索引。

我该如何解决?

非常感谢您的任何建议。

3 个答案:

答案 0 :(得分:3)

我认为您需要做的就是在结果中添加一个包含索引的属性,如下所示:

...
var result = {};
/*
info.forEach(function(x) {
    result[x] = data[i][x];
});*/

result[stat] = data[i][stat]; // <-- INSTEAD OF FOREACH LOOP
result.index = i; // <-- HERE
return result;

答案 1 :(得分:1)

var maxValue = Math.max(selectedValues);
var maxIndexes = []; //Array of indexes of == maxValue

for (_i = 0, _len = selectedValues.length; _i < _len; _i++) {
  a = selectedValues[i];
  if (a === max) {
    maxIndexes.push(_i);
  }
}

...
...
return {
  result: result
  maxIndexes: maxIndexes

}

你有一个数组,其中包含selectedValues数组中等于max的所有对象的索引。如果您想要第一个,请执行maxIndexes[0]

答案 2 :(得分:0)

在map-function中一次完成所有操作:

    var getHigherItem = function (data, stat) {
        var compare, result = {};

        var selectedValues = data.map(function (x, i) {                
            if (i == 0) {
                compare = parseFloat(x[stat]);
            } else if(compare < parseFloat(x[stat])){
                compare = parseFloat(x[stat]);
                result[stat] = parseFloat(x[stat]);
                result['index'] = i;
            }
        });
        return result;
    };

    console.log(getHigherItem(dummyData, "dial_success_rate"));