reduce高级用法

1、数组过滤 取出数组arr1中arr2数组不存在的数据

    
  const arr1 = [0, 1, 2, 3, 4, 5];
  const arr2 = [0, 4, 6, 1, 3, 9];
  function difference(arr = [], oarr = []) {
            return arr.reduce((t, v) => (!oarr.includes(v) && t.push(v), t), []);
        };
  console.log(difference(arr1, arr2));
  

 

 2、数组扁平

function flats(arr = []) {
            return arr.reduce((t, v) => t.concat(Array.isArray(v) ? flats(v) : v), []);
        };
const arr3 = [1, 2, [3, 4, [5, 6]]];
conosle.log(flats(arr3))
  

 

 3、数组去重

 function Uniq(arr = []) {
            return arr.reduce((t, v) => t.includes(v) ? t : [...t, v], []);
        }
 const arr4 = [1, 2, 3, 4, 5, 3, 3, 4, 1];
 console.log(Uniq(arr5));
     
 
 
 4、统计数组成员个数
 
function count(arr = []) {
            return arr.reduce((t, v) => {
                return t[v] = (t[v] || 0) + 1, t
            }, {})
        }
 const arr5 = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3];
      

  

5、记录数组成员位置

function position(arr = [], val) {
            return arr.reduce((t, v, i) => {
                v === val && t.push(i);
                return t;
            }, []);
        }
const arr6 =[0,1,1,2,2,3,3,4];
console.log(position(arr6,1));
    

 

6、字符串翻转

 function reverseStr(str = '') {
            return str.split('').reduceRight((t, v) => t + v);
        }
 const str = 'abcdefj';
 console.log(reverseStr(str))
     

  

7、根据对象数组特定的属性值进行分组

 function group(arr = [], key) {
            return key ? arr.reduce((t, v) => {
                !t[v[key]] && (t[v[key]] = []);
                t[v[key]].push(v);
                return t;
            }, {}) : {}
        };
   const arr7 = [
         { option: "A", name: "HY", age: 20 },
         { option: "B", name: "LQR", age: 24 },
         { option: "C", name: "CJ", age: 23 },
         { option: "A", name: "ZJY", age: 25 },
         { option: "B", name: "LY", age: 26 }
     ];
   console.log(group(arr7, "option"));
       

  

8、对数组成员包含的关键字进行统计

  function keyword(arr = [], keys = []) {
            return keys.reduce((t, v) => {
                arr.some(w => w.includes(v)) && t.push(v);
                return t;
            }, [])
        }

  const text = [
       "汉皇重色思倾国,御宇多年求不得",
       "杨家有女初长成,养在深闺人未识",
       "天生丽质难自弃,一朝选在君王侧",
       "回眸一笑百媚生,六宫粉黛无颜色",
       "春寒赐浴华清池,温泉水滑洗凝脂",
       "侍儿扶起娇无力,始是新承恩泽时"
        ];
  const keyd = ["重色", "深闺", "爱情", "君王", "一笑", "清池", "恩泽"];
  console.log(keyword(text, keyd)); 
       

  

 9、反对指定的对象的键值

function getKeys(obj = {}, keys = []) {
            return Object.keys(obj).reduce((t, v) => (keys.includes(v) && (t[v] = obj[v]), t), {})
        }
 const target = { a: 1, b: 2, c: 3, d: 4 };
 const word = ["a", "d"];
 console.log(getKeys(target, word));
      

  

posted @ 2020-12-10 19:41  拾荒者L  阅读(440)  评论(0)    收藏  举报