Arrays JSON数组,如何获取给定属性值较高的对象索引?
我有以下对象的JSON数组:Arrays JSON数组,如何获取给定属性值较高的对象索引?,arrays,json,angularjs,sorting,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
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"]));
上面的示例返回更高的值,但不返回数组中对象的索引
我怎样才能解决它呢
非常感谢您的建议。var maxValue=Math.max(selectedValues);
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
}
var maxIndexes=[]//==maxValue的索引数组
对于(_i=0,_len=selectedValues.length;_i<_len;_i++){
a=所选值[i];
如果(a==最大值){
maxIndexes.push(_i);
}
}
...
...
返回{
结果:结果
maxIndexes:maxIndexes
}
这样,您就有了一个数组,其中包含selectedValues数组中所有对象的索引,这些索引等于max。如果您想要第一个,只需执行
maxIndexes[0]
我认为您需要做的就是向结果中添加一个包含索引的属性,如下所示:
...
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;
。。。
var result={};
/*
信息forEach(函数(x){
结果[x]=数据[i][x];
});*/
结果[stat]=数据[i][stat];// 在映射功能中一次执行所有操作:
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"));
var getHigherItem=函数(数据,统计){
变量比较,结果={};
var selectedValues=data.map(函数(x,i){
如果(i==0){
比较=parseFloat(x[stat]);
}else if(比较
您想找到所选值的最大值的索引吗?
是的,我想找到给定属性上具有最高值的对象的索引。另外,您不需要foreach循环eitherA一行maxIndecesvar maxIndeces=selectedValues.reduce(函数(a,b,idx,array){if(array[idx]==maxValue){a.push(数组[idx]);};返回一个;},[])
@klode使用reduce很好