天天看点

[实战技巧]数组+对象+实际开发处理方式+实战技巧reduce数组累加获取对象中3级内容reduce链式调用3级对象内部找出数组中没有重复的元素数组扁平化递归求1 - 100 的 和slice方法 截取动态截取数组对象去重防抖图片资源懒加载1图片资源懒加载2

reduce数组累加获取对象中3级内容

需要获取北京顺义

由于k值是变量 不能用点的方式,可以用[]中括号

[实战技巧]数组+对象+实际开发处理方式+实战技巧reduce数组累加获取对象中3级内容reduce链式调用3级对象内部找出数组中没有重复的元素数组扁平化递归求1 - 100 的 和slice方法 截取动态截取数组对象去重防抖图片资源懒加载1图片资源懒加载2
[实战技巧]数组+对象+实际开发处理方式+实战技巧reduce数组累加获取对象中3级内容reduce链式调用3级对象内部找出数组中没有重复的元素数组扁平化递归求1 - 100 的 和slice方法 截取动态截取数组对象去重防抖图片资源懒加载1图片资源懒加载2

reduce链式调用3级对象内部

相当于是obj.info.address.location

[实战技巧]数组+对象+实际开发处理方式+实战技巧reduce数组累加获取对象中3级内容reduce链式调用3级对象内部找出数组中没有重复的元素数组扁平化递归求1 - 100 的 和slice方法 截取动态截取数组对象去重防抖图片资源懒加载1图片资源懒加载2

找出数组中没有重复的元素

let arr = [1, 2, 5, 66, 66, 55, 1, 2]
    const c = arr.filter((item, index) => {
        //每次循环浅拷贝数组
        let newArr = [...arr]
        //删掉当前索引的元素
        newArr.splice(index, 1)
        //然后比对 如果删掉我 在我身上 找不到重复的 那就说明我是唯一的
        if (newArr.indexOf(item) === -1) {
            return item
        }
    })
    console.log(c);
           

数组扁平化

join & split

和上面的toString一样,join也可以将数组转换为字符串

function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}

           

递归求1 - 100 的 和

function recursive(num) {
    //递归出口
        if (num == 1) {
            return 1
        }
        //返回
        return num + recursive(num - 1)
    }
    console.log(recursive(100));
           

slice方法 截取动态截取

1.先定义一个唯一的变量放在data中保存

2.保存一个完整的数组,以便于裁剪

3.开启一个定时器 唯一的变量值递增即可

[实战技巧]数组+对象+实际开发处理方式+实战技巧reduce数组累加获取对象中3级内容reduce链式调用3级对象内部找出数组中没有重复的元素数组扁平化递归求1 - 100 的 和slice方法 截取动态截取数组对象去重防抖图片资源懒加载1图片资源懒加载2

数组对象去重

//数组对象去重
						let arr = []
						let obj = {}
						for(let i = 0 ; i < res.data.result.length; i++){
							if(!obj[res.data.result[i].symptomName]){
								arr.push(res.data.result[i])
								obj[res.data.result[i].symptomName] = true
							}
						}
           
2    //  方法2:利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值
    var obj = {};
  arr = arr.reduce(function(item, next) {
     obj[next.key] ? '' : obj[next.key] = true && item.push(next);
       return item;
   }, []);
           

防抖

function showTop(e) {
        console.log(e[0]);
        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
        console.log('滚动条位置:' + scrollTop + 'px');

    }
    document.addEventListener('scroll', debounce(showTop, 100))
    function debounce(fn, delay) {
        let timer = null //借助闭包
        let context = arguments
        return function () {
            let that = this
            if (!timer) {
                timer = true
                setTimeout(() => {
                    fn.call(that, arguments)
                    timer = false
                }, delay)
            }
        }
    }
           

图片资源懒加载1

1.该种方式性能消耗很高不推荐

2.在此之前你需要了解一些api

[实战技巧]数组+对象+实际开发处理方式+实战技巧reduce数组累加获取对象中3级内容reduce链式调用3级对象内部找出数组中没有重复的元素数组扁平化递归求1 - 100 的 和slice方法 截取动态截取数组对象去重防抖图片资源懒加载1图片资源懒加载2

核心思路:给视口区域绑定滚动事件 遍历所有的图片,判断该图片是否进入视口区域,算法是:

图片资源懒加载2

推荐这种

/*
// 配置项目
 option = {
    root: "scroll-view || id容器",
    threshold: 1,
    rootMargin: "0px",
 },
 @params Object
*/
/*
// 图片组ID
 @params String
*/

/*
// 动画效果
 @params String
*/
//

export default class utilsTools {
    constructor(options, ImageList, animate) {

        this.animate = animate ? animate : ''

        // 给option配置根元素
        if (options['root']) {
            let el = document.getElementById(options['root'])
            options['root'] = el
            this.options = options
        } else {
            console.log('参数错误');
        }
        // 获取全部的图片列表
        this.ImageList = document.querySelectorAll(`#${ImageList}`)

        // 遍历图片列表 把每一项的传入
        this.ImageList.forEach(item => {
            this.LazeLoad(item)
        })
    }

    LazeLoad(item) {
        console.log(item);
        const io = new IntersectionObserver((entries, observer) => {
            console.log(entries);
            entries.forEach(entry => {
                // 判断时候是进入视口中
                if (entry.isIntersecting) {
                    const img = entry.target
                    const src = img.getAttribute('data-src')
                    img.setAttribute('src', src)
                    img.classList.add(this.animate)
                    observer.disconnect()
                }
            })
        }, this.options)
        io.observe(item)
    }
}
           
<template>
  <div>
    <h1>懒加载图片</h1>
    <img :src="imgP" alt="" />
    <div class="scroll-view" id="scroll-view">
      <!-- 没用的文字代码 只是为了占位高度 -->
      <div>
        <p>
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Incidunt
          reprehenderit rem quia, ut deserunt tempora? Optio accusantium
          doloremque veritatis, nemo maiores velit quis! Modi illum doloremque
          voluptatum cumque animi amet laudantium vero, eaque, porro inventore
          quisquam! Magni inventore quo rem voluptatibus dicta possimus
          voluptatum ut error quam nam corporis, a nemo cumque dolore eveniet
          consequatur nobis maiores ipsam aspernatur! Ducimus, eveniet officia?
          Provident est at veniam sit, omnis aliquam deleniti voluptatem
          mollitia perspiciatis quo officiis maxime voluptate repudiandae quae
          asperiores corrupti! Nihil labore esse ipsa iure dolorem quo sed.
          Molestias accusamus libero, exercitationem aut rem ipsum officiis iure
          possimus. Eum?
        </p>
        <p>
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Incidunt
          reprehenderit rem quia, ut deserunt tempora? Optio accusantium
          doloremque veritatis, nemo maiores velit quis! Modi illum doloremque
          voluptatum cumque animi amet laudantium vero, eaque, porro inventore
          quisquam! Magni inventore quo rem voluptatibus dicta possimus
          voluptatum ut error quam nam corporis, a nemo cumque dolore eveniet
          consequatur nobis maiores ipsam aspernatur! Ducimus, eveniet officia?
          Provident est at veniam sit, omnis aliquam deleniti voluptatem
          mollitia perspiciatis quo officiis maxime voluptate repudiandae quae
          asperiores corrupti! Nihil labore esse ipsa iure dolorem quo sed.
          Molestias accusamus libero, exercitationem aut rem ipsum officiis iure
          possimus. Eum?
        </p>
        <p>
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Incidunt
          reprehenderit rem quia, ut deserunt tempora? Optio accusantium
          doloremque veritatis, nemo maiores velit quis! Modi illum doloremque
          voluptatum cumque animi amet laudantium vero, eaque, porro inventore
          quisquam! Magni inventore quo rem voluptatibus dicta possimus
          voluptatum ut error quam nam corporis, a nemo cumque dolore eveniet
          consequatur nobis maiores ipsam aspernatur! Ducimus, eveniet officia?
          Provident est at veniam sit, omnis aliquam deleniti voluptatem
          mollitia perspiciatis quo officiis maxime voluptate repudiandae quae
          asperiores corrupti! Nihil labore esse ipsa iure dolorem quo sed.
          Molestias accusamus libero, exercitationem aut rem ipsum officiis iure
          possimus. Eum?
        </p>
        <p>
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Incidunt
          reprehenderit rem quia, ut deserunt tempora? Optio accusantium
          doloremque veritatis, nemo maiores velit quis! Modi illum doloremque
          voluptatum cumque animi amet laudantium vero, eaque, porro inventore
          quisquam! Magni inventore quo rem voluptatibus dicta possimus
          voluptatum ut error quam nam corporis, a nemo cumque dolore eveniet
          consequatur nobis maiores ipsam aspernatur! Ducimus, eveniet officia?
          Provident est at veniam sit, omnis aliquam deleniti voluptatem
          mollitia perspiciatis quo officiis maxime voluptate repudiandae quae
          asperiores corrupti! Nihil labore esse ipsa iure dolorem quo sed.
          Molestias accusamus libero, exercitationem aut rem ipsum officiis iure
          possimus. Eum?
        </p>
        <p>
          Lorem ipsum dolor sit amet consectetur adipisicing elit. Incidunt
          reprehenderit rem quia, ut deserunt tempora? Optio accusantium
          doloremque veritatis, nemo maiores velit quis! Modi illum doloremque
          voluptatum cumque animi amet laudantium vero, eaque, porro inventore
          quisquam! Magni inventore quo rem voluptatibus dicta possimus
          voluptatum ut error quam nam corporis, a nemo cumque dolore eveniet
          consequatur nobis maiores ipsam aspernatur! Ducimus, eveniet officia?
          Provident est at veniam sit, omnis aliquam deleniti voluptatem
          mollitia perspiciatis quo officiis maxime voluptate repudiandae quae
          asperiores corrupti! Nihil labore esse ipsa iure dolorem quo sed.
          Molestias accusamus libero, exercitationem aut rem ipsum officiis iure
          possimus. Eum?
        </p>
      </div>
      <!-- 核心代码 -->
      <ul>
        <img
          v-for="(img, idx) in arrList"
          :key="idx"
          :data-src="img.src"
          id="img"
          class="img-ani"
        />
      </ul>
    </div>
  </div>
</template>

<script>
// 作用域插槽的使用
import utilsTools from "../utils/LazyLoadImage";
export default {
  data() {
    return {
      arrList: [],
      imgP: require("../assets/logo.png"),
      option: {
        root: "scroll-view",
        threshold: 1,
        rootMargin: "0px",
      },
    };
  },
  created() {
    let op = {
      src: this.imgP,
      name: "",
    };
    for (let i = 0; i < 50; i++) {
      this.arrList.push(op);
    }
  },
  mounted() {
    this.$nextTick(() => {
      const lazy = new utilsTools(this.option, "img", "fade");
    });
  },
  computed: {},
};
</script>

<style>
h1 {
  height: 200px;
  background: red;
}
.scroll-view {
  overflow-y: auto;
  overflow-x: hidden;
  height: calc(100vh - 200px);
}
li {
  list-style: none;
}
ul {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
img {
  height: 150px;
  width: 150px;
  margin-bottom: 20px;
  border: 1px red dashed;
}
.img-ani {
  transition: all 2s;
  opacity: 0;
  transform: translateY(-20%);
}
.fade {
  transition: all 2s;
  opacity: 1;
  transform: translateY(0);
}
</style>  
           

继续阅读