Array 的方法 reduce 是一個有很是多用處的函數。 它一個很是具備表明性的做用是將一個數組轉換成一個值。可是你能夠用它來作更多的事。數組
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]
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);