分享备份一下可能用不着但是却很实用的Js的方法把

分享备份一下可能用不着但是却很使用的Js的方法把

let arr = [1,2,3,4,5,6,7];
let arr2 = [1,2,[3,4],5];

//filter =>   检查所有通过符号条件的元素
 arr.filter(item=>item>=1);
 
//every => 从迭代开始,只要有一个不符合条件的数组项,就返回
arr.every(item=>item>=1)   //false

//some => 寻找符合条件的值,一旦找到符合条件的数组项,就会返回 
arr.some(item=>item>=1)   //true

//reduce => 数组中的每个值(从左到右)开始缩减,最终计算为一个值
arr.reduce((total,item)=> total+item)     //28
其中,total 是每一个循环计算后返回的值   item是当前数组项

//flat => 将多维数组'拉平'为一维数组(不改变原数组)
arr.flat()    //  [1,2,3,4,5]

//flatMap=>对每一个数组元素执行一个函数(不改变原数组且只能展开一层数组)
arr.flatMap(item=>item*2)  //  [2, 4, 6, 8, 10, 12, 14]





//数组去重 Set 
 Array.from(new Set(arr))  或者  [...new Set(arr)];
 //深层数组去重
 let arr = [
  {id: 1, name: '周瑜1'},
  {id: 3, name: '王昭君1'},
  {id: 2, name: '李白1'},
  {id: 1, name: '周瑜2'},
  {id: 2, name: '李白1'},
  {id: 3, name: '王昭君2'}
];

let newobj = {}; 
arr = arr.reduce((preVal, curVal) => {
	newobj[curVal.name] ? '' : newobj[curVal.name] = preVal.push(curVal); 
	return preVal 
}, [])
//递归深层去重
[转载于](https://blog.csdn.net/AHRL__/article/details/83006937?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-83006937-null-null.pc_agg_new_rank&utm_term=js%E9%80%92%E5%BD%92%E6%95%B0%E7%BB%84%E5%8E%BB%E9%87%8D&spm=1000.2123.3001.4430)
var temp = []
function uniq(array){
  var result = []
  recursion(array) // 调用递归将多维数组变为一维数组再去重
  for (var i = 0, len = temp.length;i < len;i ++){
    for(var j = i + 1; j < len;j ++){
      if (temp[i] === temp[j]) {
        i ++
        j = i
      }
    }
    result.push(temp[i])
  }
  return result
}
// 新增递归函数
function recursion(array){
  var len = array.length
  for (var i = 0; i < len ;i ++) {
    if (typeof array[i] == 'object') { // 如若数组元素类型是object,则递归
      recursion(array[i])
    } else {
      temp.push(array[i]) // 否则添加到temp数组中
    }
  }
}
var arr = [1,[2,3],[3,2,[1,6,[3,5,'3']]]]
console.log(uniq(arr))


//字符串去重
 [...new Set(str)].join('')

//查找所有对象内的键值
Reflect.ownKeys(obj)
//Reflect.ownKeys返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

//普通数组排序
var arr = ["a", "b", "A", "B"];
arr.sort();
console.log(arr);//["A", "B", "a", "b"]

//数字数组排序   升序
var arr = [23, 9, 4, 78, 3];
var compare = function (x, y) {//比较函数
    if (x < y) {
        return -1;
    } else if (x > y) {
        return 1;
    } else {
        return 0;
    }
}
console.log(arr.sort(compare));      

//解决js精度问题
function withinErrorMargin (left, right) {
  return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}


//解决深拷贝问题

function deepClone(arr){
    var obj=arr.constructor==Array?[]:{};
  //第二种方法 var obj=arr instanceof Array?[]:{}
  //第三种方法 var obj=Array.isArray(arr)?[]:{}
  for(var item in arr){
        if(typeof arr[item]==="object"){
            obj[item]=deepClone(arr[item]);
        }else{
            obj[item]=arr[item];
        }
    }
    return obj;
}
//循环返回对象的value
let obj ={
	name:"张三",
	age:18
}
Object.keys(obj).map(item=>{
	return obj[item]
})
//高性能数组合并去重
let arr1 = [1,2,3,4];
let arr2 = [2,3,4,5];
function distinct(a, b) {
    let arr = a.concat(b)
    let result = []
    let obj = {}

    for (let i of arr) {
        if (!obj[i]) {
            result.push(i)
            obj[i] = 1
        }
    }

    return result
};
let res = distinct(arr1,arr2);
console.log(res);//1,2,3,4,5



//去除字符串中的标签和属性和注释
res = str.replace(/<[^>]+>/g,"").replace(/(<[^s/>]+)b[^>]*>/gi,"$1>").replace(/<!--[wWrn]*?-->/gmi, '')

//str.replace(/<[^>]+>/g,"") 去除标签
//str.replace(/(<[^s/>]+)b[^>]*>/gi,"$1>") 去除属性
//str.replace(/<!--[wWrn]*?-->/gmi, '') 去除注释


//从url获取指定字段的值
getLocationValue(name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
      var r = window.location.href.substr(1).match(reg);
      if (r != null) return window.decodeURIComponent(r[2]);
      return null
    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值