Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:从数组中查找具有最高总和值的对象_Javascript_Arrays_Object_Array Map - Fatal编程技术网

JavaScript:从数组中查找具有最高总和值的对象

JavaScript:从数组中查找具有最高总和值的对象,javascript,arrays,object,array-map,Javascript,Arrays,Object,Array Map,需要myArray中具有最大a+b值的对象 var myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}]; 现在我有一些东西可以返回索引: var max=[],maxIndex; myArray.map(x=>max.push(x.a+x.b)) maxIndex=max.indexOf(Math.max.apply(Math,max)) 到目前为止,我需要返回对象而不是其索引的东西 var maxObject=myArray.map(x=>x.a+x.b).

需要myArray中具有最大a+b值的对象

var myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}];
现在我有一些东西可以返回索引:

var max=[],maxIndex;
myArray.map(x=>max.push(x.a+x.b))
maxIndex=max.indexOf(Math.max.apply(Math,max))
到目前为止,我需要返回对象而不是其索引的东西

var maxObject=myArray.map(x=>x.a+x.b).reduce((x,y)=>x>y)

返回
false

您可以尝试以下操作:

让myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}];
设max=myArray[0].a+myArray[0].b;
让maxObject={…myArray[0]};
myArray.map((obj)=>{
如果(最大值<目标a+目标b){
最大值=对象a+对象b;
maxObject={…obj}
}
});

console.log(maxObject);//{a:10,b:7}
你可以试试这样的东西:

让myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}];
设max=myArray[0].a+myArray[0].b;
让maxObject={…myArray[0]};
myArray.map((obj)=>{
如果(最大值<目标a+目标b){
最大值=对象a+对象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((结果,对象)=>{
设总和=obj.a+obj.b;
如果(result.sumconsole.log(finalResult.obj)
您可以像下面这样使用
reduce

var myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}];
const finalResult=myArray.reduce((结果,对象)=>{
设总和=obj.a+obj.b;
如果(result.sumconsole.log(finalResult.obj)
在找到具有最高总和值的对象索引后,基于您的代码 ,只需返回该索引中的数组:

var myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}];
var max=[],
最大索引;
var结果;
myArray.map(x=>max.push(x.a+x.b))
maxIndex=max.indexOf(Math.max.apply(Math,max))
结果=myArray[maxIndex];

控制台日志(结果)在找到具有最高总和值的对象索引后,基于您的代码 ,只需返回该索引中的数组:

var myArray=[{a:5,b:10},{a:10,b:7},{a:8,b:5}];
var max=[],
最大索引;
var结果;
myArray.map(x=>max.push(x.a+x.b))
maxIndex=max.indexOf(Math.max.apply(Math,max))
结果=myArray[maxIndex];

控制台日志(结果)无需映射,因为reduce将覆盖您的阵列

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);

小提琴:

不需要地图,因为reduce将覆盖你的阵列

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:

如果你能得到索引,那么你就可以用
myArray[maxIndex]得到对象。
true,如果可能的话,我想要更高效、更短的东西,但对
数组不太了解。现在减少
myArray.reduce((x,y)=>x.a+x.b>y.a+y.b?x:y)
–您需要返回
x
y
,而不是比较中的布尔值,如果减少和数组,则得到的是最高和,而不是对象。谢谢,这就是我要找的。如果您可以得到索引,则可以使用
myArray[maxIndex]
true获得对象,如果可能的话,我想要更高效、更短的东西,但还不太了解
数组。reduce
myArray.reduce((x,y)=>x.a+x.b>y.a+y.b?x:y)
–您需要返回
x
y
,而不是从比较中返回布尔值,如果你减少和的数组,你得到的是最高的和,而不是对象。谢谢,这就是我想要的。