ES6 reduce数组方法 是一个聚合或者减少方法

版权声明:未经本人同意不得私自转载 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

猜你喜欢

转载自blog.csdn.net/qq_40190624/article/details/82534511
今日推荐