很是強力的reduce

Array 的方法 reduce 是一個有很是多用處的函數。 它一個很是具備表明性的做用是將一個數組轉換成一個值。可是你能夠用它來作更多的事。數組

一、使用"reduce"代替"map"

function map(arr, exec) {
    return arr.reduce(function(res, item, index) {
        var newArr = exec(item, index);
        res.push(newArr);
        return res;
    }, [])
}
var _arr = map([10, 20, 30, 50], function(item) {
    return item * 2
})
console.log(_arr); // => [20, 40, 60, 100]

二、使用"reduce"代替"filter"

function filter(arr, exec) {
    return arr.reduce(function(res, item, index) {
        if (exec(item, index)) {
            res.push(item)
        }
        return res;
    }, [])

}
var _arr = filter([10, 20, 30, 50], function(item) {
    return item < 50
})
console.log(_arr); // => [10,20,30]

三、應用

計算數組中元素出現的次數(將數組轉爲對象)函數

var cars = ['BMW', 'Benz', 'Benz', 'Tesla', 'BMW', 'Toyota'];
var carsObj = cars.reduce(function(obj, name) {
    obj[name] = obj[name] ? ++obj[name] : 1;
    return obj;
}, {});
console.log(carsObj); // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }

去除數組對象中重複的值(根據對象的某一個key值,key重複就認爲數組重複)code

var data = [{
    id: 0,
    name: 'jack',
    age: 30
}, {
    id: 1,
    name: 'jackchen',
    age: 20
}, {
    id: 2,
    name: 'eric',
    age: 15
}, {
    id: 3,
    name: 'tomas',
    age: 20
}, {
    id: 4,
    name: 'john',
    age: 20
}, {
    id: 5,
    name: 'jacky',
    age: 20
}]

function unique(arr, key) {
    var hash = {};
    return arr.reduce((item, next) => {
        hash[next[key]] ? '' : (hash[next[key]] = true && item.push(next));
        return item;
    }, [])
}
var newData = unique(data, "age");
console.log(newData);
相關文章
相關標籤/搜索