面试题(js高级笔试)

116 阅读2分钟

用 JavaScript 实现冒泡排序。数据为 23、45、18、37、92、13、24

//升序算法
function sort(arr){
for (var i = 0; i <arr.length; i++) {
for (var j = 0; j <arr.length-i; j++) {
if(arr[j]>arr[j+1]) {
var c=arr[j];//交换两个变量的位置
arr[j]=arr[j+1];
arr[j+1]=c;
}
};
};
return arr.toString();
}
console.log(sort([23,45,18,37,92,13,24]));

用 js 实现随机选取 10–100 之间的 10 个数字,存入一个数组并排序

function randomNub(aArray, len, min, max) {
if (len >= (max - min)) {
return '超过' + min + '-' + max + '之间的个数范围' + (max - min - 1) + '个的总数';
}
if (aArray.length >= len) {
aArray.sort(function(a, b) {
return a - b
});
return aArray;
}
var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);
for (var j = 0; j < aArray.length; j++) {
if (nowNub == aArray[j]) {
randomNub(aArray, len, min, max);
return;
}
}
aArray.push(nowNub);
randomNub(aArray, len, min, max);
return aArray;
}
var arr=[];
randomNub(arr,10,10,100);

20、已知数组 var stringArray = [“This”,“is”, “Baidu”,

“Campus”],Alert 出”This is Baidu Campus”(必会)

var stringArray = ["This", "is", "Baidu", "Campus"]

alert(stringArray.join(""))

已知有字符串 foo=”get-element-by-id”,写一个 function将其转化成驼峰表示法”getElementById”

function combo(msg){
var arr=msg.split("-"); for(
var i=1;i<arr.length;i++){
arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
}
msg=arr.join("");
return msg;
}

有这样一个URL:item.taobao.com/item.htm?a=… JS 程序提取 URL 中的各个 GET 参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中,如{a: "1",b: "2", c: "", d: "xxx", e: undefined}

function serilizeUrl(url) {
var urlObject = {};
if (/\?/.test(url)) {
var urlString = url.substring(url.indexOf("?") + 1);
var urlArray = urlString.split("&");
for (var i = 0, len = urlArray.length; i < len; i++) {
var urlItem = urlArray[i];
var item = urlItem.split("=");
urlObject[item[0]] = item[1];
}
return urlObject;
}
return null;
}

输出今天的日期,以 YYYY-MM-DD 的方式,比如今天是 2014 年9 月 26 日,则输出 2014-09-26(必会)

var d = new Date();
// 获取年,getFullYear()返回 4 位的数字
var year = d.getFullYear();
// 获取月,月份比较特殊,0 是 1 月,11 是 12 月
var month = d.getMonth() + 1;
// 变成两位
month = month < 10 ? '0' + month : month;
// 获取日
var day = d.getDate();
day = day < 10 ? '0' + day : day;
alert(year + '-' + month + '-' + day);}

把两个数组合并,并删除第二个元素

var array1 = ['a','b','c'];
var bArray = ['d','e','f'];
var cArray = array1.concat(bArray);
cArray.splice(1,1);

写一个 function,清除字符串前后的空格。(兼容所有浏览器)

//使用自带接口 trim(),考虑兼容性:
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+/, "").replace(/\s+$/,"");
}
}
// test the function
var str = " \t\n test string ".trim();
alert(str == "test string"); // alerts "true"

截取字符串 abcdefg 的 efg

alert('abcdefg'.substring(4));

判断一个字符串中出现次数最多的字符,统计这个次数

var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
if(!json[str.charAt(i)]){
json[str.charAt(i)] = 1;
}else{
json[str.charAt(i)]++;
}
};
var iMax = 0;
var iIndex = '';
for(var i in json){
if(json[i]>iMax){
iMax = json[i];
iIndex = i;
}
}
alert('出现次数最多的是:'+iIndex+'出现'+iMax+'次');

将数字 12345678 转化成 RMB 形式 如: 12,345,678

//思路:先将数字转为字符, str= str + '' ;
//利用反转函数,每三位字符加一个 ','最后一位不加; re()是自定义的反转函数,最后再反转回 去!
for(var i = 1; i <= re(str).length; i++
){ tmp += re(str)[i - 1];
if(i % 3 == 0 && i != re(str).length){
tmp += ',';
}
}

JavaScript 中如何对一个对象进行深度 clone?(必会)

<title>深克隆</title>
<script>
function clone(obj)
{
if(typeof obj==‘object‘){
if(obj instanceof Array){
var result=[];
for(var i=0;i<obj.length;i++){
result[i]=clone(obj[i]);
}
return result;
}else{
var result={};
for(var i in obj){
result[i]=clone(obj[i]);
}
return result;
}
}else{
return obj;
}
}
var obj1=[12, {a: 11, b: 22}, 5];
var obj2=clone(obj1);
obj2[1].a+=5;
console.log(obj1, obj2);
</script>

js 数组去重,能用几种方法实现

1、使用 es6 set 方法 [...new Set(arr)]

let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr)=> [...new Set(arr)];
unique(arr);//[1, 2, 3, 4, 6, 7]

2、利用新数组 indexOf 查找 indexOf() 方法可返回某个指定的元素在数组中首次出现的位置。如果没有就返回-1。

3、for 双重循环 通过判断第二层循环,去重的数组中是否含有该元素,如果有就退出第二层循环,如果没有 j==result.length 就相等,然后把对应的元素添加到最后的数组里面。

let arr = [1,2,3,4,3,2,3,4,6,7,6];
let result = [];
for(var i = 0 ; i < arr.length; i++) {
for(var j = 0 ; j < result.length ; j++) {
if(arr[i] === result[j]){
break;
};
};
if(j == result.length){
result.push(arr[i]);
};
};
console.log(result);

4、利用 for 嵌套 for,然后 splice 去重


functionunique(arr){
for(vari=0; i<arr.length; i++){ for(
var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]) {
//第一个等同于第二个,splice 方法删除第二个
arr.splice(j,1); j--;
}
}
}
return arr
;
}

5、利用 filter

let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr) => {
return arr.filter((item,index) => {
return arr.indexOf(item) === index;
})
};
unique(arr);

6、利用 Map 数据结构去重

let arr = [1,2,3,4,3,2,3,4,6,7,6];
let unique = (arr)=> {
let seen = new Map();
return arr.filter((item) => {
return !seen.has(item) && seen.set(item,1);
});
};
unique(arr);