首先第一道阿里让我用 arr = [3, [[7, [1, 5]], 4], 8, [6]];将他转化为一个平铺的数组,并将他转化为从小大的顺序排列
方法一
function flattenAndSort(array) {
return array.reduce((result, element) => {
// 如果元素是数组,则递归调用flattenAndSort
if (Array.isArray(element)) {
console.log(element, "1");
result = result.concat(flattenAndSort(element));
} else {
result.push(element);
}
return result;
}, []).sort((a, b) => a - b); // 排序数组
}
const flattenedAndSortedArray = flattenAndSort(arr);
console.log(flattenedAndSortedArray, "27");
方法二
function getArry(arr) {
const trust= []
function fn(arr) {
arr.forEach(element => {
if (Array.isArray(element)) {
fn(element);
} else {
trust.push(element);
}
});
}
fn(arr)
return trust.sort((a, b) => a - b)
}
const trust = getArry(arr)
console.log(trust);
第二道题面试官考我了一个promise.all的方法
function flattenAndSortAsync(array) {
return Promise.all(
array.map(element => {
return new Promise((resolve, reject) => {
if (Array.isArray(element)) {
// 如果元素是数组,递归调用 flattenAndSortAsync
flattenAndSortAsync(element)
.then(subArray => resolve(subArray))
.catch(error => reject(error));
} else {
// 如果元素不是数组,直接返回该元素
resolve(element);
}
});
})
).then(flattenedArray => flattenedArray.flat().sort((a, b) => a - b));
}
const arr = [3, [7, [1, 5]], 4, 8, [6]];
// 使用 Promise.all 方法
flattenAndSortAsync(arr)
.then(result => {
console.log(result);
})
.catch(error => {
console.error(error);
});
当初因为聊的比较不错,所以手写的就考了2道,大部分考的都是面试题