1.下题需要用promise进行封装,保证输出的顺序
for (var i = 0; i < 5; i++) {
setTimeOut(function(){
console.log(new Date(), i);
}, 1000);
}
console.log(new Date(), i)
function consoless () {
return new Promise(function(resolve, reject){
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(new Date(), i);
}, 1000);
}
resolve(i);
})
}
consoless().then(res => {
console.log(new Date(), res);
})
2.将每一项进行输出
for (var i = 0; i < 5; i++) {
setTimeOut(function(){
console.log(new Date(), i);
}, 1000);
}
console.log(new Date(), i)
for (var i = 0; i < 5; i++) {
function a(i){
setTimeOut(function(){
console.log(new Date(), i);
}, 1000);
}
a(i);
}
console.log(new Date(), i)
3.二分法查找
给定一个有序(非降序)数组A,可能含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1。
array=[1,2,3,5,6,7,7,10]; target = 7, return 5 target = 8, return -1
function search (arr, target) {
let len = arr.length;
if (len <= 0) {
return -1;
}
let start = 0;
let end = len - 1;
while (start <= end) {
let mid = Math.floor((start + end)/2);
if (arr[mid] == target) {
if (mid - 1 >= 0 && arr[mid - 1] == target) {
end = mid - 1;
} else {
return mid;
}
} else if (arr[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
console.log(search([1,2,3,5,6,7,7,7,7,7,7,10], 7));
4.数组扁平化
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]
//扁平化:第一种
function fn(arr) {
let list = []
arr.forEach((item) => {
if(Object.prototype.toString.call(item) === '[object Array]') {
fn(item)
} else {
if(!list.includes(item)) {
list.push(item)
}
}
})
return list
}
//扁平化:第二种
function fn(arr) {
return arr.flat(Infinity)//Infinity表示深度扁平化
}
//去重:第一种
const fn = (arr: any) => {
return arr.filter((item: any, index: number) => {
return arr.indexOf(item) === index
})
}
//去重:第一种
const fn = (arr: any) => {
return arr.reduce((list, current) => {
if (!list.includes(current)) {
list.push(current)
}
return list
}, [])
}
//去重:第三种
const fn = (arr: any) => {
return Array.from(new Set(arr))
}
//数组扁平化最简单方式
const fn = (arr: any) => {
return Array.from(new Set(arr.flat(Infinity)))
}
输入数组 ['A1', 'B1', 'A2', 'C1', 'B2', 'C2', 'D1', 'D2'] 和['B', 'A', 'D', 'C'],输出结果为['A', 'A1', 'A2', 'B', 'B1', 'B2', 'C', 'C1', 'C2', 'D', 'D1', 'D2']
const array1 = ['A1', 'B1', 'A2', 'C1', 'B2', 'C2', 'D1', 'D2']
const array2 = ['B', 'A', 'D', 'C']
let list: any = []
array2.sort().forEach((itemForeach: any) => {
let listTemp = array1.filter((itemFilter: any) => {
return itemFilter.indexOf(itemForeach) !== -1
})
list = list.concat(itemForeach, listTemp)
})
console.log('list999', list)
for(var i = 0; i < 10; i++) {
setInterval(() => {
console.log(i)
}, 1000)
}
for(let i = 0; i < 10; i++) {
setInterval(() => {
console.log(i)
}, 1000)
}
for(var i = 0; i < 10; i++) {
(function(i){
setInterval(() => {
console.log(i)
}, 1000)
}(i))
}