我知道这里有一个类似的问题:Finding the max value of an attribute in an array of objects,但是使用该方法无法返回包含最大值的整个对象。
我有这个对象数组:
[
{Prop: "something", value: 2},
{Prop: "something_else", value: 5},
{Prop: "bla", value: 3}
]
我想找到物业的最大价值"价值"然后我想返回整个对象
{Prop: "something_else", value: 5}
在javascript中最简单的方法是什么?
答案 0 :(得分:1)
也可以使用像Array.prototype.reduce这样的东西。
即
function maxVal(arr) {
return arr.reduce(function (prev, curr) {
return (prev.value >= curr.value) ? prev : curr;
});
}
编辑:如果你想要一个基本的方法,只需迭代数组,就可以做类似的事情:
function maxVal(arr) {
var max = arr[0];
for (var i = 1, iMax = arr.length; i < iMax; i++) {
if (max.value < arr[i].value) {
max = arr[i];
}
}
return max;
}
答案 1 :(得分:0)
试试这个:
array.slice().sort(function(a, b) { return a.value < b.value; })[0];
(slice
克隆数组)
答案 2 :(得分:0)
如果A是对象数组。
function return_Max_Object(A)
{
var M = -Infinity;
var Max_index = -1;
for(var i =0;i<A.length;i++)
{
if(A[i].value>M)
{
M = A[i].value;
Max_index = i;
}
}
return A[Max_index];
}
答案 3 :(得分:0)
function getMaxByVal(objArr){
var max=objArr[0]["value"];
var indexStore=0;
var i=0;
for(len=objArr.length; i<len;i++){
if(max < objArr[i]["value"]){
max=objArr[i]["value"];
indexStore=i;
}
}
return objArr[indexStore]["value"]
}
答案 4 :(得分:0)
最简单的方法是使用reduce()
。我们可以以最少的步骤来处理此问题,如果当前元素的值大于上一个值,则只需替换上一个值即可:
const objs = [
{Prop: "something", value: 2},
{Prop: "something_else", value: 5},
{Prop: "bla", value: 3}
];
const maxObj = objs.reduce((p, c) => p.value > c.value ? p : c);
console.log(maxObj);
不要对数组进行排序!对数组进行排序的主要问题是,它会导致许多不必要的迭代。数组越大,速度就越慢,可以尝试上下移动元素。