Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 使用reduce es2015查找最小值和最大值_Javascript_Ecmascript 6_Babeljs - Fatal编程技术网

Javascript 使用reduce es2015查找最小值和最大值

Javascript 使用reduce es2015查找最小值和最大值,javascript,ecmascript-6,babeljs,Javascript,Ecmascript 6,Babeljs,如果我有这样的对象数组 [{min:5,max:10,id:1}, {min:50,max:3,id:2}, {min:1,max:40,id:3}] 如何使用reduce查找最小值和最大值?我知道我可以使用通用循环和比较,但我想探索es2015中的reduce const arr=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}]; 常数min=arr.reduce((m,o)=>mM>o.max?M:o.max,-无穷

如果我有这样的对象数组

[{min:5,max:10,id:1}, {min:50,max:3,id:2}, {min:1,max:40,id:3}]
如何使用reduce查找最小值和最大值?我知道我可以使用通用循环和比较,但我想探索es2015中的reduce
const arr=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}];
常数min=arr.reduce((m,o)=>mM>o.max?M:o.max,-无穷大);
console.log(“Min:,Min”);
console.log(“Max:”,Max)
const arr=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}];
常数min=arr.reduce((m,o)=>mM>o.max?M:o.max,-无穷大);
console.log(“Min:,Min”);

console.log(“Max:”,Max)
假设您希望至少获得具有较低
min
值的项的id,那么这就可以了

const items = [{min:5,max:10,id:1}, {min:50,max:3,id:2}, {min:1,max:40,id:3}];

// Reduce to find the item with the lowest min
const min = items.reduce((res, item) => {
  // No result yet, so the item must be the lowest seen
  if (!res) return item;
  // Use the lowest of the current lowest and the current item
  return item.min < res.min ? item : res;
}, undefined).id;
const items=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}];
//减少以查找最小值为的项目
最小常数=项目。减少((资源,项目)=>{
//还没有结果,因此该项目必须是最低的
如果(!res)返回项目;
//使用当前最低值和当前项中的最低值
返回item.min
假设您希望至少获得具有较低
min
值的项目id,则此操作将完成

const items = [{min:5,max:10,id:1}, {min:50,max:3,id:2}, {min:1,max:40,id:3}];

// Reduce to find the item with the lowest min
const min = items.reduce((res, item) => {
  // No result yet, so the item must be the lowest seen
  if (!res) return item;
  // Use the lowest of the current lowest and the current item
  return item.min < res.min ? item : res;
}, undefined).id;
const items=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}];
//减少以查找最小值为的项目
最小常数=项目。减少((资源,项目)=>{
//还没有结果,因此该项目必须是最低的
如果(!res)返回项目;
//使用当前最低值和当前项中的最低值
返回item.min
您可以像这样使用reduce来获取数组中每个对象的最小值和最大值

const arr=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}]
console.log(
arr.reduce((acc,x)=>{
acc.min=数学min(acc.min,x.min)
acc.max=数学最大值(acc.max,x.max)
返回acc
},{min:无穷大,max:-无穷大})
)
//正如Bergi所建议的,我们可以只返回一个新的对象文本
//从减少
console.log(
arr.reduce((acc,x)=>({
最小值:数学最小值(acc.min,x.min),
最大值:数学最大值(acc.max,x.max)
}),{min:无穷大,max:-无穷大})

)
您可以像这样使用reduce来获取数组中每个对象的最小值和最大值

const arr=[{min:5,max:10,id:1},{min:50,max:3,id:2},{min:1,max:40,id:3}]
console.log(
arr.reduce((acc,x)=>{
acc.min=数学min(acc.min,x.min)
acc.max=数学最大值(acc.max,x.max)
返回acc
},{min:无穷大,max:-无穷大})
)
//正如Bergi所建议的,我们可以只返回一个新的对象文本
//从减少
console.log(
arr.reduce((acc,x)=>({
最小值:数学最小值(acc.min,x.min),
最大值:数学最大值(acc.max,x.max)
}),{min:无穷大,max:-无穷大})


)
不清楚您的要求是什么;例如,对于上述情况,min的正确答案是什么?最小值最低的项的ID,即ES6中的3?
reduce
与ES5中的
reduce
没有什么不同。
reduce
是一个通用循环,所有状态都通过累加器传递。@Bergi我在这里使用了错误的函数?该函数是正确的,只是不是ES6。不清楚你在要求什么;例如,对于上述情况,min的正确答案是什么?最小值最低的项的ID,即ES6中的3?
reduce
与ES5中的
reduce
没有区别。
reduce
是一个通用循环,所有状态都通过累加器传递。@Bergi我在这里使用了错误的函数?函数是正确的,这不是ES6。嗯,这里的项目是索引?怎么不使用return呢?我知道您可以使用
而不是
{
否。Item是整个对象,例如
{min:5,max:10,id:1}
res
是您返回的任何内容,
Item
是数组中的每个项。您只能使用
()
,如果你的函数是一条语句,它会隐式返回。你可以在这里使用嵌套的三元语句,但我不会这样做,因为它可读性较差。我想你也可以传入一个伪初始对象(我传入的是
未定义的
),它允许你跳过
if(!res)
check;它最终看起来与上面易卜拉欣的版本相似。主要区别在于我的版本返回整个对象,而不仅仅是找到的最小/最大值-我假设这就是您需要的,因为否则每个项目上的
id
值没有太多意义…嗯,这里的项目是索引?如何不使用返回这里?我知道你可以使用
而不是
{
否。Item是整个对象,例如
{min:5,max:10,id:1}
res
是你返回的任何东西,
Item
是数组中的每个项。你只能使用
()
,如果你的函数是一条语句,它会隐式返回。你可以在这里使用嵌套的三元语句,但我不会这样做,因为它可读性较差。我想你也可以传入一个伪初始对象(我传入的是
未定义的
),它允许你跳过
if(!res)
check;它最终看起来与上面易卜拉欣的版本相似。主要区别在于我的版本返回整个对象,而不仅仅是找到的最小/最大值-我假设这就是您需要的,因为否则每个项目上的
id
值没有太多意义…甚至可能避免 acc
并只返回一个新的对象文字。甚至可以避免
acc
的变异,只返回一个新的对象文字。@AlanJenshen解释添加了。@AlanJenshen解释添加了。