数据扁平化
数据扁平化是指将多维数组转化为一维数组。
实现:
- Array.prototype.flat直接实现数组扁平化arr.flat()括号里面传入你需要把几级中括号进行解析,如果不知道传入Infinity,会把所有的进行解析
- toString方法
let result=[]
//把其转化为字符串之后用,分割在把每一项转化为数字
result.push(arr.toString().split(',').map(item=>Number(item)))
-
join+正则表达式
-
JSON.stringify()
-
isArray与some结合
while(arr.some(item=>Array.isArray(item))){
arr=[].concat(...arr)
}
- 递归写
let arr = [1, [1, 2], 2, [3, 3, [4, 4, [5, 5], 6], 6, [7, 7], 8], 8, 9, 9];
(function () {
function myFlat() {
let result = [];
let that = this;
let fn = (arr) => {
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
fn(arr[i])
continue
}
result.push(arr[i])
}
}
fn(that)
return result
}
Array.prototype.myFlat = myFlat
})()
arr = arr.myFlat()
console.log(arr);
数组去重
- new Set(),利用set不能有重复元素的特性,最后使用Array.from转换为数组
- 利用对像的key值是唯一特性
function det(arr){
var result={};
arr.forEach((index,item) => {
result[arr[item]]="www"
});
// 取key值
//转换为数字
result=Object.keys(result).map(item=>Number(item))
return result
}
- 利用indexOf只能检测重复数字的第一项的特性
function det(arr){
var result=[];
arr.forEach((item,index) => {
if(arr.indexOf(item)==index){
result.push(item)
}
});
return result
}
- 利用reduce可以获取前一次计算完的值(扩展运算符也可以起到push的作用)
function det(arr){
var result=arr.reduce((pre,current)=>{
return pre.includes(current)?pre:[...pre,current]
},[])
return result
}
- filter过滤(同上)
- 双重for循环
var arr = [1, 2, 3, 4, 5, 3, 1, 6, 9, 10];
let obj = []
let obj2 = {}
var a = new Set([...arr])
a = Array.from(a)
console.log(a);
//---------------------------------//
console.log('@@@@@@@@@@@@@@@@@@@@');
arr.forEach((item, index) => {
if (arr.indexOf(item)) {
obj.push(arr[index])
}
})
console.log(obj);
//---------------------------------//
console.log('@@@@@@@@@@@@@@@@@@@@');
function det(arr) {
var m = arr.reduce((pre, cur) => {
return pre.includes(cur) ? pre : [...pre, cur]
}, [])
return m
}
console.log(det(arr));
//---------------------------------//
console.log('@@@@@@@@@@@@@@@@@@@@');
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(i, 1)
j--
}
}
}
console.log(arr);
//---------------------------------//
console.log('@@@@@@@@@@@@@@@@@@@@');
arr.filter((item,index,self)=>{
return self.indexOf(item)==index
})
console.log(arr);
跨域问题
html一些特殊语义化的标签是不存在跨域问题的,link,script,img,frame是不存在跨域问题的
``