child和tags都是[{id:1,value:'a'}]的格式,当点击一级标签,要看二级标签是否已经被选中,如果被选中,则清除出去 如果用for循环 再splice的话 当删除掉了一个元素后,数组的索引发生的变化,造成了程序的异常

所以要用while的方式

const arr = child.childList.map(item => item.id)
let i = this.tags.length
while (i--) {
if (arr.includes(this.tags[i].id)) {
this.tags.splice(i, 1)
}
}

上面的数组对象[{id:1,value:'a'}] 根据id去重

const id = 'id'
this.tags = this.tags.reduce((all, next) => all.some((atom) => atom[id] == next[id]) ? all : [...all, next], [])
数组去重 [1,2,3,4,2,3] 先转成没有重复的set 再转成数组
this.openLabels = Array.from(new Set(this.openLabels))
某个对象的数据渲染了dom,这时要在js里给这个对象添加一个它没有的属性,如果直接用点 elem.haveChecked = 1 这时因为这个属性不是本来就有的 vue没有给他生成getter setter 方法 所以dom的更新会没有或者慢了一秒半秒的,要用全局注册的方式:this.$set(elem, 'haveChecked', 1)
有时一个dom被删除 再被添上时 用this.$refs.stripOuter的方式 取高度 不能正常的取值 用this.$nextTick 也不行 这时 要用document.getElementsByClassName('checkHeader')[0]的方式
const headerHeight = document.getElementsByClassName('checkHeader')[0].clientHeight + 1
const stripHeight0 = document.getElementsByClassName('stripOuter')[0] ? document.getElementsByClassName('stripOuter')[0].clientHeight : 0
const stripHeight1 = document.getElementsByClassName('stripOuter')[1] ? document.getElementsByClassName('stripOuter')[1].clientHeight : 0
this.$refs.searchWrapper.style.maxHeight = headerHeight + stripHeight0 + stripHeight1 + 7 + 'px'
多层级的数组对象 的深拷贝方法。如果用[...arr] 的方式 只能深拷贝一层,再深的层 是浅拷贝,同理 Object.assign(target, source1, source2)也是,深拷贝可以用下面的方式:
this.quotaDataChange = [].concat(JSON.parse(JSON.stringify(this.quotaData)))
取父级页面或者兄弟页面的某个值可以用:
this.$parent   this.$children

近期JS心得的更多相关文章

  1. 比較Backbone.js, Angular.js, Ember.js, Knockout.js 心得

    還記得第一次寫網站的時候,我無意間寫成了 SPA(single page application),當時還沒有SPA這個詞,後來因為廣告主需要不同 url location 頁面的廣告展示,只好把部分 ...

  2. JS 心得总结

    1.浏览器关闭事件监听(http://pengjianbo1.iteye.com/blog/507569,http://bbs.csdn.net/topics/360152711) <!DOCT ...

  3. 分享一下学习css,js心得

    简化代码,使页面简洁! web前端开发——将界面更好呈现给用户! 要了解在不同浏览器上的兼容情况.渲染原理和存在的bug! 网站性能优化.SEO: 代码的可维护性.性能: 网站重构的本质:建立一个前端 ...

  4. 初次使用引用外部js心得

    在外部引用自己编辑的js时建立链接写在头部中是会出错的,如下图 错误如下: 这是一个是我初学时遇到的一个算是低级错误吧,看到这个错误,我以为的是我引用的js中编辑的代码是不是哪里写错了,但是看了好多遍 ...

  5. 普通页面使用vue.js心得

    在写本文之前要问自己几个问题,来说明为什么要这么做: 为什么在html中使用vue.js? vue.js已经趋于成熟,个人感觉比jquery要好用的多,但是在node环境下使用vue.js不用使用SS ...

  6. 今日js心得

    <input type="hidden" id="history_chart_json" data-json="#{smartDeviceMon ...

  7. JS心得——判断一个对象是否为空

    判断一个对象是否为空对象,本文给出三种判断方法: 最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带的. ...

  8. 近期js

    1 var value1 = 0, value2 = 0, value3 = 0; for ( var i = 1; i <= 3; i++) { var i2 = i; (function() ...

  9. es6,es7,es8

    概述 ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言.目前JavaScript使用的ECMAScript版本为ECMAScript-262. ECMAScript 标 ...

随机推荐

  1. jsp另外五大内置对象之-out获取缓冲区大小

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  2. 在windows 上编译部署Rap2

    在windows 上编译部署Rap2 引言 安装需要的环境 安装后端站点 创建数据库 在全局安装pm2 和 typescript 配置mysql,redis 数据库链接配置 初始化 编译 初始化数据库 ...

  3. 【UML】用例图Use Case diagram(转)

    http://blog.csdn.net/sds15732622190/article/details/48858219 前言 总结完UML概述,就该说道UML中的九种图了,这九种图中,最先要说的,就 ...

  4. cocos2dx 通过jni调用安卓底层方法

    cocos2dx通过封装JniHelper类来调用安卓api底层函数,该文件在cocos/platform/android/jni/JniHelper.h,使用方法如下: 打开eclipse,导入co ...

  5. 2d游戏中求出一个向量的两个垂直向量

    function cc.exports.VerticalVector(vec)--求出两个垂直向量 local result = {} result[1] = cc.p(vec.y/vec.x,-1) ...

  6. TabControl重写,添加关闭按钮

    class userTabControl : TabControl { const int CLOSE_SIZE = 15; protected override void OnInvalidated ...

  7. MySQL 如何将Id相同的字段合并,并且以逗号隔开

    数据库存的数据 sql: SELECT Id,GROUP_CONCAT(`Name` SEPARATOR ',') NAMES FROM `stu` GROUP BY Id;

  8. 如何用纯 CSS 创作一台拍立得照相机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...

  9. QT入门学习笔记1:为什么要选QT及QT软件下载

    为什么选择QT? Qt突出的优势: ◆ Qt 是基于 C++ 的一种语言扩展(Extention) C/C++ 目前还是一种很多人都在学习的语言. Qt的好处就在于Qt本身可以被称作是一种 C++ 的 ...

  10. Cleaning Shifts POJ - 2376 (贪心题)

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31194   Accepted: 7677 ...