javascript 和 ES6相关的一些知识

forEach 的经验

1.当数组中元素是值类型,forEach 绝对不会改变数组

var arr = [1, 2, 3]
arr.forEach((a) => {
    a = a * 2
})
// => [1,2,3]

2.当是引用类型,则可以改变数组

var arr = [{ name: '张三', age: 18 }, { name: '李四', age: 19 }]
arr1.forEach((a) => {
    a.age = a.age + 1
})
//=> [{name:'张三',age:19},{name:'李四',age:20}]

3.forEach 不支持链式调用,有返回值的支持链式调用.

let arr = [1,2,3,4]
arr.forEach(a=>{
    console.log(1)
}).sort((a,b=>{
    return a > b
}))
=>Uncaught SyntaxError: Identifier 'arr' has already been declared
    at <anonymous>:1:1
let arr = [1,2,3,4]
arr.filter(a=>{
    return a > 1
}).sort((a,b)=>{
    return a > b
})

4.后台返回的数据通过 forEach 处理时会赋值不成功,可以通过 JSON 先编码再解码解决

 let b = res.data.data
 b = JSON.parse(JSON.stringify(b))

sort 排序

1.比较值类型

[5,2,3,4].sort((a,b)=>{return a - b})
=>比较值类型 a-b 从小到大 b-a从大到小

2.比较引用类型

[{name:'张三',age:'10'},{name:'李四',age:'19'}].sort((a,b)=>{return a.age - b.age})
=>比较值类型 a-b 从小到大 b-a从大到小

set 去重

1.new set() 得到的值是一个对象,可以使用 add()方法,add 相同的值添加不进去,但是添加的是相同的引用类型可以添加(它的缺点,不能去重元素是引用对象的数组)

let tempArr = new Set([1,2,3,3,4,4,5])
tempArr.add(1)
tempArr.add(1)
tempArr.add({name:'张三'});
tempArr.add({name:'张三'});
console.log([...tempArr])
=>
0: 1
1: 2
2: 3
3: 4
4: 5
5: {name: "张三"}
6: {name: "张三"}

Lodash 的 _.uniqWith()去重

// import _ from 'lodash';
var objects = [{ x: 1, y: 2 }, { x: 2, y: 1 }, { x: 1, y: 2 }]
_.uniqWith(objects, _.isEqual)
//=> [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]

数组对象合并,并且根据自定义字段排序

let roles = [
    { roleName: '本人', value: '' },
    { roleName: '配偶', value: '' },
    { roleName: '父母', value: '' },
    { roleName: '子女', value: '' }
]
let roles1 = [
    { roleName: '配偶', value: 'peiou' },
    { roleName: '本人', value: 'benren' },
    { roleName: '子女', value: 'zinv' },
    { roleName: '父母', value: 'fumu' }
]
roles = roles.map((item, index) => {
    return { ...item, ...roles1[index] }
})
console.log(roles)
>>
(4) [{…}, {…}, {…}, {…}]
0: {roleName: "配偶", value: "peiou"}
1: {roleName: "本人", value: "benren"}
2: {roleName: "子女", value: "zinv"}
3: {roleName: "父母", value: "fumu"}
length: 4
roles.sort((a, b) => {
//根据order数组的顺序排序
let order = ['本人', '配偶', '父母', '子女']
return order.indexOf(a.roleName) - order.indexOf(b.roleName)
})
console.log(roles)
>>
(4) [{…}, {…}, {…}, {…}]
0: {roleName: "本人", value: "benren"}
1: {roleName: "配偶", value: "peiou"}
2: {roleName: "父母", value: "fumu"}
3: {roleName: "子女", value: "zinv"}
length: 4

//存在一点问题,修改一下
 roles = roles.map(a => {
     roles1.forEach(b => {
         if (a.roleName == b.roleName) {
             a = b
            }
     })
     return a
})

解决移动端苹果手机点击 input 会向上移动的问题和点击其他地方不会失去焦点

document.getElementById('pwd').addEventListener('focus', function() {
    document.body.scrollTop = 0
})

document.body.addEventListener(
    'touchmove',
    function(e) {
        document.documentElement.scrollTop = 0
        e.preventDefault()
    },
    {
        passive: false,
    }
) //passive 参数不能省略,用来兼容ios和android
document.querySelector('body').addEventListener('touchend', function(e) {
    if (e.target.className != 'input') {
        document.getElementById('pwd').blur()
    }
})

javascript常用api JS内置对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。