我需要知道如何解决我从互联网上读到的这个问题。
对于给定的数组,我需要找到所有的uniques元素并减去10。然后对所有元素进行求和。然后,将每个数组值乘以该数字(求和)。
我假设我可以使用reduce来进行求和,然后使用map进行乘法运算,但是我真的不知道它是如何工作的,所以我陷入了困境。另外要找到独特的元素也不容易。
我有输入值和预期值。
Input, expected
[1], [1]
[1, 1, 2], [2, 2, 4]
[0, 0, 1, 2, 1], [0, 0, 2, 4, 2]
[0, 10, 1, 1, 20, 3, 40, 3], [0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 2, 4, 11], [0, 6, 6, 12, 24, 66]
[10, 1, 1, 1], [0, 0, 0, 0]
[10, 11, 1, 2, 3, 4], [100, 110, 10, 20, 30, 40]
我正在尝试一些事情,但主要问题是我不了解语法。我知道如何通过循环解决此迭代,但是我想学习高阶函数。
这不是学校的项目,我正在学习这一点,所以我不需要解决方案,我想了解,谢谢。
我试过的是这样应用地图。并过滤和减少
var input = [0, 0, 1, 2, 1]
var output = [0, 0, 2, 4, 2]
var map, reduce, filter;
map = input.map(multiplyFunction(first,second))
function multiplyFunction(first,second){
return first*second
}
您好,欢迎来到StackOverflow。
首先,我认为开始了解语法的一个好方法是检查w3示例:filter,map,reduce。或mozilla示例:filter,map,reduce
尝试这些示例,并尝试理解每个步骤。
您的锻炼需要这三个功能,因此,作为概述,我们可以以这种方式定义每个功能(也许是非正式的):
所以...为您的运动。
这些短语本身说明了要使用的功能。检查一下:
我需要找到所有唯一性元素,并且减去10
这意味着:“我需要使用filter
类似的功能return unique && x < 10
。”
然后做总结
所以...归结为一个独特的元素。就像“然后reduce
用return currentValue + nextValue
然后将每个数组值乘以该数字
就像这样:“然后将每个值映射为value*=sumatory
”
就这样!容易吧?现在让我们翻译成代码。
假设您有一个这样的数组:([10, 11, 1, 2, 3, 4]
示例的最后一个)
首先,您需要找到唯一值,并使用<10 filter
。
独特的位置是有技巧的。如果比较一个数字的第一个索引和最后一个索引,并且它的值相同,则...是唯一的。所以功能是这样的
var array = [10, 11, 1, 2, 3, 4]
var filter = array.filter(x => (array.indexOf(x) === array.lastIndexOf(x) && x < 10))
console.log(filter) // [ 1, 2, 3, 4 ]
但是,不仅只有一种方法可以做到这一点。您可以创建一个Set
没有重复的值,计算每个值以获取具有count=1
或不带有任何值的值,这是您的决定。我选择这个是因为我认为这是最好的方法。
语法很容易理解:对于数组中的每个值,命名x
后执行=>
函数即可。在这种情况下,比较索引,比较为<10
。
请注意,在您的示例中,您不见了,(x) =>
因此您无法将变量传递给函数。
下一步... reduce
var reduce = filter.reduce((a, b) => a + b, 0)
console.log(reduce) // 10
简单。使用reduce
到输出数组中。
这里的sintaxys是:“使用当前值a
和下一个值b
,执行从“开始”=>
的功能。换句话说...做总结。a+b
0
最后一步:Map
。
var map = array.map((m) => {
return m * reduce
})
console.log(map) // [ 100, 110, 10, 20, 30, 40 ]
在这里,您说的是:“对于数组中的每个值m
,执行一个函数=>{...}
,将其乘以求和m * reduce
。”
现在:一起做!!
是的,(真的)最后一步,仅替换函数的变量。
如果您看到reduce
放filter.reduce((a, b) => a + b, 0)
。
在哪里filter
设置array.filter(x => (array.indexOf(x) === array.lastIndexOf(x) && x < 10))
var map = array.map((m) => {
return m * (array.filter(x => (array.indexOf(x) === array.lastIndexOf(x) && x < 10))).reduce((a, b) => a + b, 0)
})
就这样。
希望可以帮助您了解如何使用这些功能以及如何解决这些问题。
看完您尝试过的内容后,请查看示例,并注意需要使用获取变量(var) =>
。
还有一个片段
var array = [10, 11, 1, 2, 3, 4]
var map = array.map((m) => {
return m * (array.filter(x => (array.indexOf(x) === array.lastIndexOf(x) && x < 10))).reduce((a, b) => a + b, 0)
})
console.log(map)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句