zoukankan      html  css  js  c++  java
  • 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);     
  • 相关阅读:
    双camera景深计算
    解决单反出片发灰难题 教你让照片变得通透
    增强画面纵深感的几个小技巧
    双目视觉算法简介
    Android系统源代码的下载与编译
    android 7.0 (nougat)的编译优化-ninja
    神奇的图像处理算法
    【老戴说镜头】浅谈双摄镜头技术
    [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
    关于DLL模块导出函数
  • 原文地址:https://www.cnblogs.com/minozMin/p/10179610.html
Copyright © 2011-2022 走看看