谁说我们前端只有单线程的思考,进来考考你还要其他方法嘛?编程题附加答案,你有更妙的想法,欢迎留言噢😊😊
1、请把两个数组 ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'] 和 ['A', 'B', 'C', 'D'],合并为 ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1', 'D2', 'D']。
let a1 = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2'] let a2 = ['A', 'B', 'C', 'D'].map((item) => { return item + 3 }) let a3 = [...a1, ...a2].sort().map((item) => { if(item.includes('3')){ return item.split('')[0] } return item })
2、改造下面的代码,使之输出0 - 9,写出你能想到的所有解法。
for (var i = 0; i < 10; i++) {
setTimeout(i => {
console.log(i);
}, 1000, i)
3、{1:222, 2:123, 5:888},请把数据处理为如下结构:[222, 123, null, null, 888, null, null, null, null, null, null, null]。
let obj = {1:222, 2:123, 5:888};
const result = Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
console.log(result)
4、已知如下数组:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]; function flatAll(arr) { // toString方法将数组转化成字符串'1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10' // split(',')方法将字符串转换成数组["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"] // sort 方法排序 // map(Number) 方法将每个元素映射成数字 console.log(arr.toString().split(',')) var arr2 = arr.toString().split(',').sort((a, b) => a - b).map(Number) // set结构去重 // Array.from 方法通过类数组结构创建数组 return Array.from(new Set(arr2)); } console.log(flatAll(arr))
5、求两个数组的交集
let arr1 =[0,2,4,5,7]
let arr2 = [0,3,5,6,8,4,9,55]
var newarr = arr1 .filter((v) => arr2 .includes(v))
//也可以用,不考虑(数组中不含NaN)
newarr = arr1.filter((v)=> arr2.indexOf(v)>-1 )
//filter方法是返回一个符合过滤条件的新数组,不改变原有的数组
5-1、求并集
arr1.concat(arr2.filter(function(v) {
return arr1.indexOf(v) === -1})) // [1,2,3,4,5]
5-2、求差集
newarr= a.filter(function(v){
return b.indexOf(v) === -1
}).concat(b.filter(function(v){ return a.indexOf(v) === -1 }))
6、随机生成一个长度为10的数组,如[2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成形式如下的新数组: [[2, 3, 4, 5], [10, 11], [20]]。
function method2() {
const getRandomNum = () => Math.floor(Math.random() * 100) + 1;
const arr = Array.from({ length: 10 }).map(getRandomNum);
const newArr = [...new Set(arr)].sort((a, b) => a - b);
const obj = {};
newArr.forEach(item => {
let key = Math.floor(item / 10);
!obj[key] ? (obj[key] = [item]) : obj[key].push(item);
});
return [...Object.values(obj)];
}
// 得到一个两数之间的随机整数,包括两个数在内
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值
}
// 随机生成10个整数数组, 排序, 去重
let initArr = Array.from({ length: 10 }, (v) => { return getRandomIntInclusive(0, 99) });
initArr.sort((a,b) => { return a - b });
initArr = [...(new Set(initArr))];
// 放入hash表
let obj = {};
initArr.map((i) => {
const intNum = Math.floor(i/10);
if (!obj[intNum]) obj[intNum] = [];
obj[intNum].push(i);
})
// 输出结果
const resArr = [];
for(let i in obj) {
resArr.push(obj[i]);
}
console.log(resArr);
7、 如何把一个字符串的大小写取反(大写变小写小写变大写),例如 ’AbC' 变成 'aBc' 。
let str = 'Hello世界和平World!' //str.replace(/[a-zA-Z]/g 通过正则表达式来捕获所有字母 content为捕获结果 str = str.replace(/[a-zA-Z]/g,function(content){ //方法一:content.toUpperCase()===content //方法二:content.charCodeAt()>=65 && content.charCodeAt()<=90 //此段代码逻辑:将捕获的结果转化为大写字母与捕获结果来进行判断,若为true表示捕获的结果为大写字母,需要转化为小写字母,否则转为大写字母 return content.toUpperCase()===content?content.toLowerCase():content.toUpperCase() }); console.log(str)
8、给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
function rotate(arr, k) {
const len = arr.length
const step = k % len
return arr.slice(-step).concat(arr.slice(0, len - step))
}
// rotate([1, 2, 3, 4, 5, 6], 7) => [6, 1, 2, 3, 4, 5]
9、打印出 1 - 10000 之间的所有对称数
function isSameNum(start, end) {
start = (start <= 11 ? 11 : start);
for (var i = start; i <= end; i++) {
var strI = +(i. toString().split('').reverse(). join(''));
if (strI == i) {
console.1og(i);
}
}
}
10、给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
// 示例:
// 输入: [0,1,0,3,12]
// 输出: [1,3,12,0,0]
-
必须在原数组上操作,不能拷贝额外的数组。
-
尽量减少操作次数。
//直接交换
var moveZeroes = function (nums) {
if (nums.length < 2) {
return nums
}
let tmp = 0 //tmp指向0存在的位置
for (let i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
if (nums[tmp] == 0) {
nums[tmp] = nums[i]
nums[i] = 0
}
tmp++
}
}
return nums
};