以下是JavaScript关于数组的四道面试题的详细攻略:
面试题一:如何将数组扁平化?
问题描述
给定一个多维数组,如何将其转为一维数组,即扁平化?
解决方案
我们可以使用ES6的 flat
方法,该方法接收一个可选参数depth,指定展开的深度。当不传depth时,默认展开所有层级。
同时,为了兼容性,我们也可以使用递归实现深度优先的扁平化。
示例代码如下:
// 使用 flat 方法
const arr = [1,2,[3,4,[5,6]]];
const flatArr1 = arr.flat(Infinity);
console.log(flatArr1); // [1, 2, 3, 4, 5, 6]
// 使用递归实现深度优先的扁平化
function flatten(arr) {
let result = [];
arr.forEach(item => {
if(Array.isArray(item)){
result = result.concat(flatten(item));
}else{
result.push(item);
}
});
return result;
}
const flatArr2 = flatten([1,2,[3,4,[5,6]]]);
console.log(flatArr2); // [1, 2, 3, 4, 5, 6]
面试题二:将数组中的元素乱序排列
问题描述
给定一个数组,如何将其中的元素乱序排列?
解决方案
我们可以使用Fisher-Yates洗牌算法,该算法的思路是从最后一个元素开始,依次将当前元素与之前的随机一个元素交换位置,直到遍历到第一个元素。
示例代码如下:
function shuffle(arr) {
for (let i = arr.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
const arr = [1,2,3,4,5];
console.log(shuffle(arr)); // 可能输出 [5, 2, 1, 4, 3] 或 [3, 5, 4, 2, 1] 等等
面试题三:如何去重并排序数组?
问题描述
给定一个数组,如何去除其中的重复元素并按升序排序?
解决方案
我们可以使用Set去重,然后使用sort方法对去重后的数组进行排序。
示例代码如下:
const arr = [5, 2, 3, 4, 5, 1, 2];
const uniqueArr = [...new Set(arr)].sort((a, b) => a - b);
console.log(uniqueArr); // [1, 2, 3, 4, 5]
面试题四:如何查找数组中的重复元素?
问题描述
给定一个数组,如何查找其中的重复元素?
解决方案
我们可以使用一个对象或Map记录每个元素出现的次数,然后根据出现次数筛选出重复的元素。
示例代码如下:
const arr = [5, 2, 3, 4, 5, 1, 2];
// 使用 Map
function findDuplicates(arr) {
const map = new Map();
const result = [];
arr.forEach((item) => {
const count = map.get(item) || 0;
map.set(item, count + 1);
});
map.forEach((count, item) => {
if(count > 1) result.push(item);
});
return result;
}
console.log(findDuplicates(arr)); // [2, 5]
// 使用普通对象
function findDuplicates2(arr) {
const obj = {};
const result = [];
for (let i = 0; i < arr.length; i++) {
const count = obj[arr[i]] || 0;
obj[arr[i]] = count + 1;
}
for (const key in obj) {
if (obj.hasOwnProperty(key) && obj[key] > 1) {
result.push(+key);
}
}
return result;
}
console.log(findDuplicates2(arr)); // [2, 5]
以上就是 JavaScript 关于数组的四道面试题的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript关于数组的四道面试题 - Python技术站