JavaScript: 从数组中查找求和值最高的对象
JavaScript: find Object with highest summed values from Array
需要来自 myArray 的具有最大 a+b 值的对象
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
现在我有一些 returns 我的索引:
var max = [], maxIndex;
myArray.map(x=>max.push(x.a + x.b))
maxIndex = max.indexOf( Math.max.apply(Math, max))
我需要一些东西 returns 对象而不是它的索引,目前正在使用
var maxObject = myArray.map(x=>x.a + x.b).reduce((x,y)=>x>y)
正在返回 false
。
您可以尝试类似的方法:
let myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
let max = myArray[0].a + myArray[0].b;
let maxObject = {...myArray[0]};
myArray.map((obj) => {
if(max < obj.a + obj.b) {
max = obj.a + obj.b;
maxObject = {...obj}
}
});
console.log(maxObject); // { a: 10, b: 7 }
您可以像下面这样使用reduce
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
const finalResult = myArray.reduce((result, obj) => {
let sum = obj.a + obj.b;
if(result.sum < sum) {
return {sum, obj: {...obj}}
}
return result;
}, {sum: 0, obj: {}})
console.log(finalResult.obj)
希望对您有所帮助。
根据您的代码,找到具有最高总和值的对象的索引后
,您只需 return 该索引中的数组:
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
var max = [],
maxIndex;
var result;
myArray.map(x => max.push(x.a + x.b))
maxIndex = max.indexOf(Math.max.apply(Math, max))
result = myArray[maxIndex];
console.log(result);
不需要 map,因为 reduced 会遍历你的数组。
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
var biggestSumObj = myArray.reduce((total,current)=>{
if((current.a + current.b) > (total.a + total.b)){
return current;
}
return total;
});
console.log(biggestSumObj);
fiddle: return biggest object
需要来自 myArray 的具有最大 a+b 值的对象
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
现在我有一些 returns 我的索引:
var max = [], maxIndex;
myArray.map(x=>max.push(x.a + x.b))
maxIndex = max.indexOf( Math.max.apply(Math, max))
我需要一些东西 returns 对象而不是它的索引,目前正在使用
var maxObject = myArray.map(x=>x.a + x.b).reduce((x,y)=>x>y)
正在返回 false
。
您可以尝试类似的方法:
let myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
let max = myArray[0].a + myArray[0].b;
let maxObject = {...myArray[0]};
myArray.map((obj) => {
if(max < obj.a + obj.b) {
max = obj.a + obj.b;
maxObject = {...obj}
}
});
console.log(maxObject); // { a: 10, b: 7 }
您可以像下面这样使用reduce
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
const finalResult = myArray.reduce((result, obj) => {
let sum = obj.a + obj.b;
if(result.sum < sum) {
return {sum, obj: {...obj}}
}
return result;
}, {sum: 0, obj: {}})
console.log(finalResult.obj)
希望对您有所帮助。
根据您的代码,找到具有最高总和值的对象的索引后 ,您只需 return 该索引中的数组:
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
var max = [],
maxIndex;
var result;
myArray.map(x => max.push(x.a + x.b))
maxIndex = max.indexOf(Math.max.apply(Math, max))
result = myArray[maxIndex];
console.log(result);
不需要 map,因为 reduced 会遍历你的数组。
var myArray = [{a:5,b:10},{a:10,b:7},{a:8,b:5}];
var biggestSumObj = myArray.reduce((total,current)=>{
if((current.a + current.b) > (total.a + total.b)){
return current;
}
return total;
});
console.log(biggestSumObj);
fiddle: return biggest object