• 数组去重复(偶然遇到这个问题,以此记录)


    数组没有一个专门的属性去除重复元素,所以需要单独操作去除重复元素,以下有十一种方法,不管是字符串数组、数字数组还是其他都适用:

    1.双重for循环

    1. // 1.双重for循环
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. // 方法1: 双重for 循环
    5. function newArrFn(arr) {
    6. // 创建一个新的空数组
    7. let newArr = []
    8. for (let i = 0; i < arr.length; i++) {
    9. // 设置一个开关,如果是true,就存进去,不是就不存
    10. let temp = true
    11. for (let j = 0; j < newArr.length; j++) {
    12. // 原数组和新数组作比较,如果一致,开关变为 false
    13. arr[i] === newArr[j] ? temp = false : temp
    14. };
    15. temp ? newArr.push(arr[i]) : newArr
    16. };
    17. return newArr
    18. }
    19. console.log(newArrFn(arrNum)); // [1, 2, 3, 4, 5, 6, 8]
    20. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    2.for循环+indexOf

    1. // 2.for循环+indexOf
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. let newArr = []
    6. for (let i = 0; i < arr.length; i++) {
    7. newArr.indexOf(arr[i]) === -1 ? newArr.push(arr[i]) : newArr
    8. };
    9. return newArr
    10. }
    11. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]
    12. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    3.Set,ES6的数据类型,Set的一个最大的特点就是数据不重复。

    Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。

    1. // 3.Set,ES6的数据类型,Set的一个最大的特点就是数据不重复。
    2. // Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。
    3. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    4. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    5. function newArrFn(arr) {
    6. // .new Set方法,返回是一个类数组,需要结合 ...运算符,转成真实数组
    7. return ([...new Set(arrString)])
    8. }
    9. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']
    10. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]

    4.set + Array.from,ES6的语法,Array.from将一个类数组对象转换为一个真正的数组。

    1. //set + Array.from,ES6的语法,Array.from将一个类数组对象转换为一个真正的数组
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. return (Array.from(new Set(arr)))
    6. }
    7. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']
    8. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]

    5.filter + indexOf

    1. // 5.filter + indexOf
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. // 利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等,
    6. // 如果相等,说明数组中没有重复的
    7. return Array.prototype.filter.call(arr, function(item, index) {
    8. return arr.indexOf(item) === index
    9. })
    10. }
    11. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']
    12. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]

    6.for+includes,判断数组是否有某项值,有就返回true,没有就返回false并push进去.

    1. // 6.for+includes,判断数组是否有某项值,有就返回true,没有就返回false并push进去
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. // 用includes检查新数组是否包含原数组的每一项
    6. // 如果不包含,就push进去
    7. let newArr = []
    8. for (let i = 0; i < arr.length; i++) {
    9. newArr.includes(arr[i]) ? newArr : newArr.push(arr[i])
    10. };
    11. return newArr
    12. }
    13. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]
    14. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    7.for + object,对象属性名不能重复

    1. // 7.for + object,对象属性名不能重复
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. // 如果对象中不存在,就可以给 push 进去
    6. let newArr = []
    7. let obj = {}
    8. for (let i = 0; i < arr.length; i++) {
    9. if (!obj[arr[i]]) {
    10. newArr.push(arr[i])
    11. obj[arr[i]] = 1
    12. } else {
    13. obj[arr[i]]++
    14. }
    15. };
    16. return newArr
    17. }
    18. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]
    19. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    8.for + splice

    1. // 8.for + splice
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. // 用 splice 进行切割。
    5. function newArrFn(arr) {
    6. for (let i = 0; i < arr.length; i++) {
    7. for (let j = i + 1; j < arr.length; j++) {
    8. if (arr[i] === arr[j]) {
    9. arr.splice(j, 1);
    10. j--
    11. }
    12. };
    13. }
    14. return arr
    15. }
    16. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]
    17. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    9.filter + indexOf

    1. // 9.filter + indexOf
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. // filter 过滤配合 indexOf 查找元素
    5. function newArrFn(arr) {
    6. return arr.filter((item, index) => {
    7. return arr.indexOf(item) === index
    8. })
    9. }
    10. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]
    11. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    10.Map,利用数据结构存值的特点

    1. // 10.Map,利用数据结构存值的特点
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. let newArr = []
    6. let map = new Map()
    7. for (let i = 0; i < arr.length; i++) {
    8. // 若map里面不包含,就设置进去
    9. if (!map.has(arr[i])) {
    10. map.set(arr[i], true)
    11. newArr.push(arr[i])
    12. }
    13. };
    14. return newArr
    15. }
    16. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]
    17. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']

    11.reduce,ES6

    1. // 11、reduce,ES6
    2. var arrNum = [1, 2, 9, 4, 5, 6, 4, 3, 8, 1]
    3. var arrString = ['apple', 'orange', 'banana', 'apple', 'orange', ]
    4. function newArrFn(arr) {
    5. let newArr = []
    6. return arr.reduce((prev, next, index, arr) => {
    7. // 若包含,就返回原数据,不包含则把新数据追加进去
    8. return newArr.includes(next) ? newArr : newArr.push(next)
    9. }, 0)
    10. }
    11. console.log(newArrFn(arrString)); // ['apple', 'orange', 'banana']
    12. console.log(newArrFn(arrNum)); // [1, 2, 9, 4, 5, 6, 3, 8]

  • 相关阅读:
    vulnhub靶机doubletrouble
    vued中图片路径与主机路径相关联,例如img:‘http://127.0.0.1:8000/media/data/els.jpg‘
    基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL
    虚拟机磁盘扩容(纯命令行)
    【力扣SQL】几个常见SQL题
    ​CUDA学习笔记(六)Warp解析
    milvus upsert流程源码分析
    图像修复方法研究综述----论文笔记
    数据结构与算法(C语言版)P3.2---链表之带头双向循环链表的实现
    CTK框架(二): 接口、插件和服务
  • 原文地址:https://blog.csdn.net/weixin_45096939/article/details/128025204