如何使用 reduce 测试 Math.max 函数的数组

Posted

技术标签:

【中文标题】如何使用 reduce 测试 Math.max 函数的数组【英文标题】:How to use reduce to test an array for the Math.max function 【发布时间】:2020-01-04 15:49:13 【问题描述】:

我有一个由 range(i, (i + j)) 函数生成的数组,该函数使用两个计数器 i 和 j。 range 函数可以很好地生成 [3, 4, 5, 6] 类型的数组

一旦生成了这个数组,我想指向另一个名为 y 的数组中的对象 3、4、5 和 6。

在指向的每个对象中,我想要其值的键称为“权重”。

我想使用 Math.max 返回权重最大的那个。

谁能帮帮我,我是 javascript 新手,不太擅长这个。

谢谢。

我尝试了以下代码,但它给出了错误

var m = Math.min(   (   y[range(i, (i + j))].weight   )
)
console.log(m)

给出的错误是“无法读取未定义的属性‘权重’”。这是因为 range 函数返回一个我要测试的数字数组,所以它试图将其处理为:

var m = Math.min(   (   y[[3, 4, 5, 6]].weight   )
)
console.log(m)

而不是我希望看到的以下内容:

var m = Math.min(   (   y[3].weight   ), (   y[4].weight   ), (   y[5].weight   ),  (   y[6].weight   )
)
console.log(m)  

使用 reduce() 是否适合帮助代码按顺序运行 range 函数返回的数组中的每个数字,如果可以,如何实现 reduce()?

非常感谢,我真的很感激。

【问题讨论】:

Math.min(...y.slice(3,7).map((weight) => weight)) ? 如果您的问题已得到解答,请将其标记为已关闭。 我更新了问题以纳入给出的建议。它给出了一个新错误,它“无法读取未定义的属性‘扁豆’” @tonypizza - 现在,您的ifelse 语句具有相同的确切语句,并且您的else 应该有一个== 而不是=。通过在for 循环内使用slice(),您正在处理目前仅可用的数据。很可能您不需要将slice() 放入for 循环中。看看我的回答:***.com/a/57742901/2924577. 嗨 Nikhil,我已经在更新 2 中发布了上面的工作代码。如果你能看一下它并告诉我如何实现扩展和切片函数来嵌套循环,我将不胜感激它。谢谢,谢谢 【参考方案1】:

使用array.map() 代替spread syntax,如下所示:

const min = Math.min( ...( range(i, i+j).map(i => y[i].weight) ) );

ma​​p 运算符将使用回调函数的结果创建一个新数组,spread 语法(那些...)将'spread' 数组值就像它们是参数一样。

【讨论】:

【参考方案2】:

如果您只想使用range(i, i+j) 函数访问y 数组,则不需要使用它。

您可以使用 JavaScript 的 slice() 方法从索引 ii+j+1 之间的 y 数组创建一个新数组。

var y2 = y.slice(i, i+j+1);

现在,您可以使用map() 方法从y2 数组的每个对象中创建一个仅包含weight 属性的新数组。

var weights = y2.map(obj => obj.weight);

要找到这些权重的最小值,您可以使用 JavaScript 的 Math.min() 函数。 Spread syntax 可用于将权重数组作为参数传递给 Math.min() 函数。

var min = Math.min(...weights);

演示:

var y = [
  "weight": 100, "a": 1, "b": 2,
  "weight": 200, "a": 1, "b": 2,
  "weight": 300, "a": 1, "b": 2,
  "weight": 400, "a": 1, "b": 2,
  "weight": 500, "a": 1, "b": 2
 ]; 

var i = 1, j= 2; // Values used in your range() function.

var y2 = y.slice(i, i+j+1);

var weights = y2.map(obj => obj.weight);

console.log("All weights: " + weights);

var min = Math.min(...weights);

console.log("Minimum weight: " + min);

【讨论】:

以上是关于如何使用 reduce 测试 Math.max 函数的数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Dart 中的迭代器上创建 sum、min、max 属性

Math.min() Math.max() Math.min().apply() Math.max() .apply()该如何使用???

FCC 中级算法题 对所有的数字求和

数组获取最大值

JavaScript中pipe实战

fcc中级算法题