我有以下对象的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"]));
上面的示例返回更高的值,但不返回数组中对象的索引。
我该如何解决?
非常感谢您的任何建议。
答案 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"));