Javascript 减少 function/ternary 运算符
Javascript reduce function/ternary operator
function largestInEach(arr) {
var resultArray = [],
highestValue = 0;
for (var i = 0; i < arr.length; i++) {
highestValue = arr[i].reduce(function(a, b){
return a >= b ? a : b;
});
resultArray.push(highestValue);
}
return resultArray;
}
谁能解释一下这段代码。
剩下的代码我已经很清楚了,但是我对reduce函数和它的应用理解起来有点吃力。
Reduce 函数允许您遍历数组中的每个项目,您可以在其中查看先前的数组值和当前数组值,在您的例子中:
a = previous value,
b = current value,
-(不在里面)-
i = index,
currArray = the array you are working with.
并且在您的代码中,如果您的先前值大于或等于当前值,则您正在比较和 returning。
a >= b ? a : b;
条件(三元)运算符是 (condition ? do this : or this ) -> 把它想象成一个 if 语句
如果(a >= b){
return一个
}别的{
returnb
}
见Conditional (ternary) Operator
您的 'arr' 也可以是多维数组。例如在 http://plnkr.co/edit/?p=preview
上尝试以下代码
按 F12 键获取开发者工具并查看控制台结果。
var arr = [[1,2],[4,3],[5,23,52]];
var resultArray = [],
var highestValue;
for (var i = 0; i < arr.length; i++) {
highestValue = arr[i].reduce(function(a, b){
return a >= b ? a : b;
});
resultArray.push(highestValue);
}
console.log(resultArray);
您的结果数组包含 [2, 4, 52]。
希望对您有所帮助。
我同意其他大多数评论,您应该多搜索并进行自学。
但是,我知道有时很难找到关于事情如何运作的确切信息。所以我向你解释这个。
现在来看你的代码。
https://jsfiddle.net/Peripona/ppd4L9Lz/
它包含一个数组数组,您在最后创建一个结果数组,其中包含来自所有子数组的最高或最低值元素。
就像你有
var arry = [[1,2,3],[2,3,4],[20,-2,3]]
通俗地说...
如果你对一个整数数组进行排序或归约,你会得到一个数组,它可能并不总是生成你想要的
例如,如果你得到了这个数据
var ar = [1,3,34,11,0,13,7,17,-2,20,-21]
如果你正常使用 ar.sort() 来获取排序值
你会期待这样的...作为输出
" [-21, -2, 0, 1, 3, 7, 11, 13, 17, 20, 34] "
但相反你会得到这样的输出..
" [-2, -21, 0, 1, 11, 13, 17, 20, 3, 34, 7] "
现在您想知道...为什么会出现这种奇怪的行为以及它对我的问题有何影响..
这很重要..
因为这是你需要做的才能得到正确的输出..
编写排序函数的方式必须适用于 String 和其他类型。所以他们在进行排序比较时将数据转换为其他格式。
总而言之,如果您在内部传递一个函数并指定您需要按升序排列的 a-b..
降序为 b-a..
ar.sort(函数(a,b){return a-b;})
现在来到 Reduce 的另一部分,此函数接受一个函数参数,并从数组中获取最高或最低值。
因此如果你这样做..
ar.reduce(function(a,b){return a>=b ? b : a})
会给你 -21 作为输出..
如果你这样做
ar.reduce(function(a,b){return a>=b ? a : b})
它会给你:34
所以这个函数将采用多维数组,其中每个数组包含一些数字,这个函数将使你从所有这些数组中得到最高的..
我希望这能解释一切。
JS reduce 方法针对数组的两个值应用,并根据定义的条件(return c = a+b )将数组的这两个值(a 和 b)减少为一个(c)。
在您的情况下,条件是两个中哪个更大 (a>b?a:b).
function largestInEach(arr) {
var resultArray = [],
highestValue = 0;
for (var i = 0; i < arr.length; i++) {
highestValue = arr[i].reduce(function(a, b){
return a >= b ? a : b;
});
resultArray.push(highestValue);
}
return resultArray;
}
谁能解释一下这段代码。
剩下的代码我已经很清楚了,但是我对reduce函数和它的应用理解起来有点吃力。
Reduce 函数允许您遍历数组中的每个项目,您可以在其中查看先前的数组值和当前数组值,在您的例子中:
a = previous value, b = current value,
-(不在里面)-
i = index, currArray = the array you are working with.
并且在您的代码中,如果您的先前值大于或等于当前值,则您正在比较和 returning。
a >= b ? a : b;
条件(三元)运算符是 (condition ? do this : or this ) -> 把它想象成一个 if 语句 如果(a >= b){ return一个 }别的{ returnb }
见Conditional (ternary) Operator
您的 'arr' 也可以是多维数组。例如在 http://plnkr.co/edit/?p=preview
上尝试以下代码按 F12 键获取开发者工具并查看控制台结果。
var arr = [[1,2],[4,3],[5,23,52]];
var resultArray = [],
var highestValue;
for (var i = 0; i < arr.length; i++) {
highestValue = arr[i].reduce(function(a, b){
return a >= b ? a : b;
});
resultArray.push(highestValue);
}
console.log(resultArray);
您的结果数组包含 [2, 4, 52]。
希望对您有所帮助。
我同意其他大多数评论,您应该多搜索并进行自学。 但是,我知道有时很难找到关于事情如何运作的确切信息。所以我向你解释这个。
现在来看你的代码。
https://jsfiddle.net/Peripona/ppd4L9Lz/
它包含一个数组数组,您在最后创建一个结果数组,其中包含来自所有子数组的最高或最低值元素。
就像你有
var arry = [[1,2,3],[2,3,4],[20,-2,3]]
通俗地说...
如果你对一个整数数组进行排序或归约,你会得到一个数组,它可能并不总是生成你想要的 例如,如果你得到了这个数据
var ar = [1,3,34,11,0,13,7,17,-2,20,-21]
如果你正常使用 ar.sort() 来获取排序值
你会期待这样的...作为输出 " [-21, -2, 0, 1, 3, 7, 11, 13, 17, 20, 34] "
但相反你会得到这样的输出..
" [-2, -21, 0, 1, 11, 13, 17, 20, 3, 34, 7] "
现在您想知道...为什么会出现这种奇怪的行为以及它对我的问题有何影响..
这很重要..
因为这是你需要做的才能得到正确的输出.. 编写排序函数的方式必须适用于 String 和其他类型。所以他们在进行排序比较时将数据转换为其他格式。
总而言之,如果您在内部传递一个函数并指定您需要按升序排列的 a-b.. 降序为 b-a.. ar.sort(函数(a,b){return a-b;})
现在来到 Reduce 的另一部分,此函数接受一个函数参数,并从数组中获取最高或最低值。
因此如果你这样做..
ar.reduce(function(a,b){return a>=b ? b : a})
会给你 -21 作为输出..
如果你这样做
ar.reduce(function(a,b){return a>=b ? a : b})
它会给你:34
所以这个函数将采用多维数组,其中每个数组包含一些数字,这个函数将使你从所有这些数组中得到最高的..
我希望这能解释一切。
JS reduce 方法针对数组的两个值应用,并根据定义的条件(return c = a+b )将数组的这两个值(a 和 b)减少为一个(c)。 在您的情况下,条件是两个中哪个更大 (a>b?a:b).