CVTE-2021年春-web前端开发实习岗-在线笔试(6)
昨天晚上7点到8点半进行了CVTE的笔试,7点半后不可入场,试卷共27道题,2道编程题,25道不定项选择题。现在来总结一下。
1、第一道编程题:
实现一个函数,传入数组长度n,输出一个n*n的二维数组。
要求:二维数组中的每一个值为Math.random()*n并且保留一位小数,二维数组每一行需要正序排列。
列如toCustomArray(3);
输出:
[
[1.3, 2.4, 2.9],
[1.2, 1.8, 2.6],
[0.1, 0.4, 2.5]
]
代码实现:
function toCustomArray(n){
var arr = [];//创建一维数组
for(let i = 0; i < n; i++){
arr[i] = [];//创建二维数组
for(let j = 0; j < n; j++){
arr[i][j]=(Math.random()*n).toFixed(1);//随机数保留一位小数
}
for(let k = 0; k < n; k++){
arr[i].sort(function(a,b){//数组正序排序
return a-b;
});
}
}
console.log(arr);
}
toCustomArray(3);
2、第二道编程题:
写一个方法equal()比较两个变量的值是否相等。
要求:
如果是基础类型,要求值全等,
如果是引用类型,要求遍历的所有值全等。
例如:
1、var a=1,b=1,c=‘1’;
equal(a,b)//true
equal(a,c)//false
2、var a={a:‘a’, b:‘b’}, b={a:‘a’, b:‘b’}, c={a:‘a’};
equal(a,b)//true
equal(a,c)//false
3、var a=[1,2], b=[1,2], c={0:1, 1:2};
equal(a,b)//true
equal(a,c)//false
思路:
所有情况统一处理,先判断两个参数长度是否相等(数组有长度属性,对象和基础类型变量没有长度属性,从而区分出数组、对象和基础类型变量),
若不等直接返回false,若相等则获取两个参数的所有键值数组,再次判断两数组的长度是否相等,若不等直接返回false。若相等则循环判断数组的值是否相等
function equal(a, b) {
// 判断数组的长度
if (a.length !== b.length) {
return false
} else {
let keysOne = Object.keys(a); // 获取对象1所有键数组
let keysTwo = Object.keys(b); // 获取对象2所有键数组
if (keysOne.length !== keysTwo.length) return false;
// 循环遍历数组的值进行比较
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) {
return false
}
}
return true;
}
}
/*
var a=1,b=1,c='1';
equal(a,b)//true
equal(a,c)//false
*/
var a={a:'a', b:'b'}, b={a:'a', b:'b'}, c={a:'a'};
equal(a,b)//true
equal(a,c)//false
/*
var a=[1,2], b=[1,2], c={0:1, 1:2};
equal(a,b)//true
equal(a,c)//false
*/
以上代码参考
js中的传值和传引用,判断两个数组是否相等
JS对比两个对象键值全等
3、总结:
总体来说第一题相对简单,第二题需要比较的情况多,相对难,希望xdm能够给出更好的答案,谢谢!