分享备份一下可能用不着但是却很实用的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, '') 去除注释