• es6 实现数组的操作


    1、实现数组的去重:

      1.1、方法一:

    let arr = [{id: 1, name: 'aa'},  {id: 2, name: 'bb'}, {id: 3, name: 'cc'}, {id: 4, name: 'dd'}, {id: 5, name: 'ee'}, {id: 1, name: 'aa'}, {id: 1, name: 'aa'}, {id: 1, name: 'aa'}, {id: 1, name: 'aa'}];
    
    function unique(array) {
        const res = new Map();
        return array.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));   //用列表的id判断是否有重复     
    }
    
    unique(arr);

      1.2、方法二:

    let hash = {},
         arr = [{id: 1, name: 'aa'},  {id: 2, name: 'bb'}, {id: 3, name: 'cc'}, {id: 4, name: 'dd'}, {id: 5, name: 'ee'}, {id: 1, name: 'aa'}, {id: 1, name: 'aa'}, {id: 1, name: 'aa'}, {id: 1, name: 'aa'}];
    
    const newArr = arr.reduceRight((item, next) => {
        hash[next.id] ? '' : hash[next.id] = true && item.push(next);
        return item;
    }, []);    console.log(newArr);

    2、实现数组的过滤:

    let arr = [{id: 1, name: 'aa'},  {id: 2, name: 'bb'}, {id: 3, name: 'cc'}, {id: 4, name: 'dd'}, {id: 5, name: 'ee'}];
    
    function filter(arrayList, id) {
        let temp = arrayList.filter((list) => {
            if(list.id === id) {    //过滤列表id等于id值,相反也可以用"!=="来过滤不等于id值的列表
                return list;
            }
        });
        return temp;
    }
    
    filter(arr, 1);  

     3、数组的相同属性值的合并:

    let a = [{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 1, name: 'c'},{id: 3, name: 'd'}, {id: 2, name: 'e'}, {id: 4, name: 'f'}];
    
    let b = a.reduce((memo, {id, name}) => {
        !memo[id] ? memo[id] = name : memo[id] += name;
        return memo;
    }, {});  //{1: "ac", 2: "be", 3: "d", 4: "f"}

    4、数组的扁平化:

    function convert(val) {
        return val.reduce((init, next) => {
            if(typeof next === 'object') {
                next.forEach(item => {
                    if(typeof item === 'object') {
                        init = init.concat(convert(item));
                    } else {
                        init.push(item);
                    }
                });
            } else {
                init.push(next);
            }
            return init;
        }, [])
    }
    
    Array.from(new Set(convert([1, 2, [3, 2, 1, [1, 2, 3, 4]]])));    //[1, 2, 3, 4]

    5、摘取数组对象的某几个字段:

    var arr = [
      {
        'id': '1',
        'name': 'img1',
        'imgUrl': './img1.jpg',
      },
      {
        'id': '2',
        'name': 'img2',
        'imgUrl': './img2.jpg',
      },
      {
        'id': '3',
        'name': 'img3',
        'imgUrl': './img3.jpg',
      }
    ];
    arr.map(x => {return {'imgUrl': x.imgUrl, 'name': x.name}}) 

     6、两个数组拼接成对象数组:

      方法一:

    let metrodates = ['2008-01', '2008-02', '2008-03'];
    let figures = [0, 0.555, 0.293];
    let output = metrodates.map((date, i) =>({date, data: figures [i]})); 
    console.log(output);    //[{date: "2008-01", data: 0}, {date: "2008-02", data: 0.555}, {date: "2008-03", data: 0.293}]

       方法二:

    const zip = ([x, ...xs],  [y, ...ys]) => {
        if(x === undefined || y === undefined)
            return []; 
        else
            return [[x, y], ...zip(xs, ys)];
        }
    let metrodates = ['2008-01', '2008-02', '2008-03'];
    let figures = [0, 0.555, 0.293];
    let output = zip(metrodates, figures).map(([date, data]) =>({date, data}));
    console.log(output);   //[{date: "2008-01", data: 0}, {date: "2008-02", data: 0.555}, {date: "2008-03", data: 0.293}]

       方法三:

    const isEmpty = xs => xs.length === 0;
    const head =([x, ...xs]) => x;
    const tail =([x, ...xs]) => xs;
    const map = (f, ...xxs) => {
        let loop = (acc, xxs) => {
            if(xxs.some(isEmpty)) 
                return acc; 
            else
            return loop([...acc, f(...xxs.map(head))], xxs.map(tail));
        };
        return loop([], xxs);
    }; 
    let metrodates = ['2008-01', '2008-02', '2008-03'];
    let figures = [0, 0.555, 0.293];
    let output = map((date, data) =>({date, data}), metrodates, figures);
    console.log(output);     
  • 相关阅读:
    【分治法】线性时间选择(转)
    【分治法】最接近点对问题(转)
    概率DP入门总结 16题(转)
    动态规划初探及什么是无后效性? (转)
    第15章DP(转)
    整数快速乘法/快速幂+矩阵快速幂+Strassen算法 (转)
    矩阵乘法的理解(转)
    算法导论第4章习题与思考题(转)
    Transaction Script模式
    注册服务
  • 原文地址:https://www.cnblogs.com/minozMin/p/10179610.html
Copyright © 2020-2023  润新知