JavaScript 大千世界

前言

条条道路通罗马,这篇文章会把不同场景的不同实现方式收集想来,只是为了展示更多的可能性。


遍历

数组遍历:

// 方法一:
for(let i;i<len;i++){}
// 方法二:
arr.forEach((item,index,array)=>{});
// 方法三
let newArr = arr.map((value, index, array) => value*index);

对象遍历:

// 方法一:
for(key in obj){}
// 方法二:
for(let key of Object.keys(obj)){}
// 方法三:
for(let value of Object.values(obj)){}
// 方法四:
for(let [key,value] of Object.entries(obj)){}

拷贝

数组的拷贝:

// 方法一:
let newArr = [].concat(arr)
// 方法二:
let newArr = arr.slice()
// 方法三:
let newArr = Array.from(arr)
// 方法四:
let newArr =  Object.assign([], arr)
// 方法五:
let newArr = [...arr]

对象的拷贝:

// 方法一:
let newObj = Object.assign({}, obj)
// 方法二:(JSON.stringify() 方法会忽略值为 undefined,函数,Symbol的项)
let newObj = JSON.parse(JSON.stringify(obj));

注意:不管是数组还是对象的拷贝,上面的方法都属于浅拷贝


查找

字符串:

let index = str.indexOf('xxx')   // 找不到返回 -1
let index = str.search('xxx')    // 找不到返回 -1
let flag = str.includes('xxx')   // 返回布尔值

数组:

let index = arr.indexOf('xxx')    // 找不到返回 -1
let index = arr.findIndex(fn);    // 找不到返回 -1
let value = arr.find('xxx');      // 返回第一个满足条件的元素,找不到返回 undefined
let flag = arr.includes('xxx')    // 返回布尔值
let flag = arr.some(fn)           // 有一个元素满足条件,返回 true,并终止检测
let flag = arr.every(fn)          // 只要有一个元素不满足条件时,返回 false,并终止检测,否则返回 true

对象:

// 方法一:
"name" in obj;
// 方法二:
obj.hasOwnProperty("name");
// 方法三:(返回 true 的前提:属性为对象自有并可枚举)
obj.propertyIsEnumerable("name")
// 方法四:
obj.name

去重

数组去重

方法1:

通过 Set 来实现

function arrayUnique (arr) {
  return [...new Set(arr)]
}

方法2:

通过 filter 实现

function arrayUnique (arr) {
  return arr.filter((item, index) => {
    return arr.indexOf(item) === index
  })
}