如何使用 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 - 现在,您的if
和else
语句具有相同的确切语句,并且您的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) ) );
map 运算符将使用回调函数的结果创建一个新数组,spread 语法(那些...
)将'spread' 数组值就像它们是参数一样。
【讨论】:
【参考方案2】:如果您只想使用range(i, i+j)
函数访问y
数组,则不需要使用它。
您可以使用 JavaScript 的 slice() 方法从索引 i
和 i+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()该如何使用???