- 多維數(shù)組轉(zhuǎn)一維數(shù)組
var arr = [1,2, [1,2,3],4,5,[5,6,[1,2]],7,8]
// 轉(zhuǎn)字符串后轉(zhuǎn)回?cái)?shù)組漓帚,此時(shí)數(shù)組值為字符串吞琐,然后用map轉(zhuǎn)number
let arr1 = arr.join(',').split(',')
let res = arr1.map(item => Number (item))
// 方法二遞歸
var arr = [1,2, [10,20,30],4,5,[15,16,[21,31]],7,8]
var res = []
function fun (data){
for(let item of data) {
if(item instanceof Array){
fun(item)
} else {
res.push(item)
}
}
return res
}
console.log(fun(arr))
2.排序
// 1.冒泡排序
let arr = [1,3,6,2,10]
function fun (arr){
for (var i=0;i<arr.length-1;i++){
//控制每比較的次數(shù)
for (var j=0;j<arr.length-1-i;j++){
if (arr[j]<arr[j+1]){
// 或es6的數(shù)組解構(gòu)語法
[arr[j], arr[j+1]] = [arr[j+1], arr[j]]
}
}
}
return arr
}
// 2.快速排序
// //快排
var arr = [2,5,1,4,9,10]
function fun (arr) {
var arr1 = []
var cindex = Math.floor(arr.length / 2)
var c = arr.splice(cindex, 1);
for (var i = 0; arr.length > i; i++){
if (arr[i] > c){
arr1.push(arr[i])
} else {
arr1.unshift(arr[i])
}
}
arr1.splice(cindex-1, 0, ...c)
return arr1
}
3.字符串中重復(fù)最多的字符
var str = 'aaabbbbccd' 或 var str = [1,1,1,1,2,2,3,4]
var obj = {} //轉(zhuǎn)成對(duì)象格式
for(let i = 0; str.length > i; i++){
if(!obj[str[i]]){ //對(duì)象key值不存在時(shí),新加入value默認(rèn)1
obj[str[i]] = 1
}else {
obj[str[i]]++ // 存在自加
}
}
console.log(obj) // {a:3;b:4;c:2;d:1}
var max = 0 // 最多次數(shù)即對(duì)象value最大值
var n = '' // 最大值的key
for(var j in obj) {
if(obj[j] > max){
max = obj[j]
n = j
}
}
4.json對(duì)象去重函數(shù)
function uniqueArray(arr,key){
// new_arr數(shù)組是存放key值的對(duì)象,用于排除重復(fù)的對(duì)象
var new_arr=[];
// result用于存放new_arr排除后沒有重復(fù)對(duì)象的值
var result=[];
for(var i=0; i<arr.length; i++){
// new_arr中不包含key值才能進(jìn)入
if(!new_arr.includes(arr[i][key])){
//如果沒有找到就把這個(gè)key放到arr里面桶蝎,以便下次循環(huán)時(shí)用
new_arr.push(arr[i][key]);
//result中不存在的項(xiàng)push進(jìn)去
result.push(arr[i]);
}
}
return result;
}
5.淺拷貝與深拷貝
1)深復(fù)制在計(jì)算機(jī)中開辟了一塊內(nèi)存地址用于存放復(fù)制的對(duì)象杠娱,
2)而淺復(fù)制僅僅是指向被復(fù)制的內(nèi)存地址,如果原地址中對(duì)象被改變了与学,那么淺復(fù)制出來的對(duì)象也會(huì)相應(yīng)改變彤悔。
//1.淺拷貝
ES6:Object.assign()
數(shù)組:
let arr = [1, 2, 3]
let copy_arr = []
1.copy_arr = Array.from(arr)
2.copy_arr = [...arr]
3.for(var i=0; i<arr.length; i++){
copy_arr[i]=arr[i];
}
對(duì)象:
let obj = {name: 'zhangsan',sex: '男'}
let copy_obj = {}
for(var i in obj){
copy_obj[i] = obj[i]
}
//2.深拷貝--遞歸復(fù)制
function deepCopy(obj){
let result = Array.isArray(obj)?[]:{};
if(obj && typeof obj === 'object'){
for(let key in obj){
if(obj.hasOwnProperty(key)){
// 如果key還是對(duì)象或數(shù)組繼續(xù)調(diào)用該方法
if(obj[key]&&typeof obj[key]==='object'){
result[key]=deepCopy(obj[key]);
}else{
result[key]=obj[key];
}
}
}
}
return result;
}
6.倒計(jì)時(shí)
// 倒計(jì)時(shí)10秒
//1.延時(shí)器實(shí)現(xiàn)
var time = 10
var timer = setInterval(() => {
if(time>1){
time --
} else {
time = 0
clearInterval(timer)
}
console.log(time)
},1000)
//2.定時(shí)器實(shí)現(xiàn)
var time = 10
function fun(){
var timer = setTimeout(fun,1000)
if(time>1){
time --
} else {
time = 0
clearTimeout(timer)
}
console.log(time)
}
fun()
Json 對(duì)象,判斷兩個(gè)value值相等
function uniqueArray(arr,key,val){
// new_arr數(shù)組是存放key值的對(duì)象索守,用于排除重復(fù)的對(duì)象
var new_arr=[];
// result用于存放new_arr排除后沒有重復(fù)對(duì)象的值
var result=[];
for(var i=0; i<arr.length; i++){
arr[i][key] = arr[i][key] - 0
arr[i][val] = arr[i][val] - 0
// new_arr中不包含key,val值才能進(jìn)入
if(new_arr.includes(arr[i][key]) && new_arr.includes(arr[i][val])){
arr[i][val] += (Math.random() * 0.0001)
result.push(arr[i]);
} else {
new_arr.push(arr[i][key]);
new_arr.push(arr[i][val]);
result.push(arr[i]);
}
}
return result;
}
6.多層嵌套json對(duì)象添加屬性
// 方法一 遞歸函數(shù)
// data: json對(duì)象數(shù)據(jù)
// beforeActive:添加的屬性
dataFormat(data) {
if (!data.hasOwnProperty('beforeActive')) {
// data['tag'] = 'beforeActive';
data.beforeActive = true
}
// 要返回其枚舉自身屬性的對(duì)象
const propArr = Object.keys(data);
propArr.forEach(item => {
if (typeof data[item] === 'object') {
this.dataFormat(data[item]);
}
});
return data;
};
// 方法二
// obj為json對(duì)象晕窑,addkey:添加的屬性。addvalue: 添加的屬性值
mapObj(obj, addkey, addvalue){
for(let key in obj){
if (key === 'children'
&& obj.hasOwnProperty("children")
&& obj[key] instanceof Object
&& !obj instanceOf Array) {
obj[key][addkey] = addvalue
mapObj(obj[key],addkey,addvalue)
}
}
}
// 解析url
function analysisUrl(url){
let hash = url.slice(url.indexOf('?')+1).split('&')
let params = {}
for(let i in hash){
hash[i] = hash[i].split("=")
params[hash[i][0]]=hash[i][1]
}
return params
}