版权声明:未经本人同意不得私自转载 https://blog.csdn.net/qq_40190624/article/details/82534511
reduce 可以替换我们的map和foreach
/**
* 计算数组中所有值的总和
*/
var numbers = [10,20,10,40];
var sum = 0
// ES5
for(var i = 0 ; i<numbers.length; i++){
sum += numbers[i]
}
console.log(sum)//80
// ES6
var sumValue = numbers.reduce(function(sum2,number){
/**
* reduce为迭代函数,中有两个值,一个为初始值,一个拿到numbers传进来的每一个值,初始值定义为0
*/
return sum2 + number
},0)
console.log(sumValue)//80
/**
* 将数组中对象的某个属性抽离到另外一个数组中,
* 可以使用map()方法
* 我们在这里就使用reduce
*/
var primaryColors = [
{color:"red"},
{color:"yellow"},
{color:"blue"},
];
var colors = primaryColors.reduce(function(previous,primaryColor){
previous.push(primaryColor.color);
return previous;
},[])
console.log(colors)//(3) ["red", "yellow", "blue"]
/**
* 判断字符串括号是否对称
*/
function balancedParens(string){
return string.split('').reduce(function(previous,char){
/**
* 用split对每个字符切割,
* 传初始值为0,每传进来一个值就让其进入条件,如果最终为0,证明括号是对称的,
* 否则不对称,如果是非括号就不对称
* 直接return出来
*/
if(char == "("){ return ++previous; }
if(char == ")"){ return --previous; }
return previous;
},0)
};
console.log(balancedParens("(sdfdsf()))"))//-1
/**
* 用split对每个字符切割,
* 传初始值为0,每传进来一个值就让其进入条件,如果最终为0,证明括号是对称的,
* 否则不对称,如果是非括号就不对称
* 直接return出来
* 如果用true 和false来表示就在string前加一个!
* 还有一种情况如果一开始括号为)就是不合法的;所以应该加个判断阻止它
*/
function balancedParens(string){
return !string.split('').reduce(function(previous,char){
if(previous < 0){return previous}
if(char == "("){ return ++previous; }
if(char == ")"){ return --previous; }
return previous;
},0)
};
console.log(balancedParens("()(())"))//true