1.數(shù)組方法里push价脾、pop牧抵、shift、unshift侨把、join犀变、split分別是什么作用。
push:棧方法秋柄,先入后出获枝,向棧頂增加一個(gè)元素,返回新數(shù)組長(zhǎng)度。
pop:棧方法骇笔,先入后出省店,從棧頂刪除一個(gè)元素,返回被刪除的元素蜘拉。
shift:隊(duì)列方法萨西,先入先出,從隊(duì)列首部刪除一個(gè)元素,返回被刪除的元素旭旭。
unshift:隊(duì)列方法谎脯,先入先出,從隊(duì)列首部增加一個(gè)元素持寄,返回新數(shù)組長(zhǎng)度源梭。
join:將數(shù)組中的元素以join指定參數(shù)為連接符連接。
split:將字符串以指定參數(shù)為分隔符分割成數(shù)組稍味,指定的參數(shù)一定是原字符串中存在的废麻。
2.用 splice 實(shí)現(xiàn) push、pop模庐、shift烛愧、unshift方法
var arr=[0,1,2,3,4,5,6,7,8,9];
arr.splice(arr.length,0,10); //splice實(shí)現(xiàn)push
arr.splice(arr.length-1,1); //splice實(shí)現(xiàn)pop
arr.splice(0,1,-1); //splice實(shí)現(xiàn)shift,刪除首元素
arr.splice(0,0); //splice實(shí)現(xiàn)unshift掂碱,增加一個(gè)元素到隊(duì)首
3.使用數(shù)組拼接出如下字符串
var prod = {
name: '女裝',
styles: ['短款', '冬季', '春裝']
};
function getTpl(data){
//todo...
};
/*
getTpl(prod) //調(diào)用函數(shù)輸出如下內(nèi)容
<dl class="product">
<dt>女裝</dt>
<dd>短款</dd>
<dd>冬季</dd>
<dd>春裝</dd>
</dl>
*/
function getTpl(data){
var htmlarr=[];//創(chuàng)建空數(shù)組存放html元素;
htmlarr.push('<dl class="product"> ');//棧頂增加新html元素
htmlarr.push('<dt>'+data.name+'</dt> ');//棧頂增加新html元素
data.styles.map(function(e,i,a){//styles數(shù)組中的每個(gè)元素使用回調(diào)函數(shù)創(chuàng)建html元素
htmlarr.push('<dd>'+e+'</dd> ');
})
htmlarr.push('</dl>');
console.log(htmlarr.join(""));//htmlarr數(shù)組中用""連接起來(lái)
};
getTpl(prod);//調(diào)用函數(shù)
4.寫(xiě)一個(gè)find函數(shù)怜姿,實(shí)現(xiàn)下面的功能
var arr = [ "test", 2, 1.5, false ]
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1
代碼如下:
function find(arr,num){
return arr.indexOf(num);
};
5.寫(xiě)一個(gè)函數(shù)filterNumeric,把數(shù)組 arr 中的數(shù)字過(guò)濾出來(lái)賦值給新數(shù)組newarr疼燥, 原數(shù)組arr不變
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]
代碼如下:
var arr = ["a", "b", 1, 3, 5, "b", 2];
function filterNumberic(el){
var newarr;
return newarr=arr.filter(function(e){//filter方法返回滿足特定條件的元素組成的數(shù)組
return typeof(e)==="number";
})
};
filterNumberic(arr);
}
6.對(duì)象obj有個(gè)className屬性沧卢,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫(xiě)addClass醉者、removeClass函數(shù)但狭,有如下功能:
var obj = {
className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open') // 因?yàn)閛pen已經(jīng)存在披诗,所以不會(huì)再次添加open
addClass(obj, 'me') // me不存在,所以 obj.className變?yōu)?open menu new me'
console.log(obj.className) // "open menu new me"
removeClass(obj, 'open') // 去掉obj.className里面的 open立磁,變成'menu new me'
removeClass(obj, 'blabla') // 因?yàn)閎labla不存在呈队,所以此操作無(wú)任何影響
代碼如下:
var obj = {
className: 'open menu'
};
function addClass(obj,newstr){ //addClass函數(shù)
var newarr;
newarr=obj.className.split(" ");
if(newarr.indexOf(newstr)<0){
newarr.splice(newarr.length,0,newstr);
obj.className=newarr.join(" ");
return obj.className;
}
else{
return obj.className;
}
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open') // 因?yàn)閛pen已經(jīng)存在,所以不會(huì)再次添加open
addClass(obj, 'me') // me不存在息罗,所以 obj.className變?yōu)?open menu new me'
console.log(obj.className) // "open menu new me"
function removeClass(obj,newstr){ //removeClass函數(shù)
var newarr;
newarr=obj.className.split(" ");
if(newarr.indexOf(newstr)>=0){
newarr.splice(newarr.indexOf(newstr),1);
obj.className=newarr.join(" ");
return obj.className;
}
else{
return obj.className;
}
}
removeClass(obj, 'open') // 去掉obj.className里面的 open掂咒,變成'menu new me'
removeClass(obj, 'blabla') // 因?yàn)閎labla不存在,所以此操作無(wú)任何影響
7.寫(xiě)一個(gè)camelize函數(shù)迈喉,把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串
camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'
代碼如下:
function camelize(str){
return str.split("-").join(""); //先分割開(kāi)再用join連接起來(lái)
}
8.如下代碼輸出什么?為什么?
arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );//輸出結(jié)果3温圆,arr數(shù)組中增加了一個(gè)元素function(){}
arr[arr.length-1]() // 返回結(jié)果先彈出alert:undefined,再輸出數(shù)組中索引號(hào)為2的元素挨摸,即function(){}。'hello hunger valley'
9.寫(xiě)一個(gè)函數(shù)filterNumericInPlace岁歉,過(guò)濾數(shù)組中的數(shù)字得运,刪除非數(shù)字。要求在原數(shù)組上操作
arr = ["a", "b", 1, 3, 4, 5, "b", 2];
//對(duì)原數(shù)組進(jìn)行操作锅移,不需要返回值
filterNumericInPlace(arr);
console.log(arr) // [1,3,4,5,2]
代碼如下:
arr = ["a", "b", 1, 3, 4, 5, "b", 2];
function filterNumbericInplace(arr){
for(var i=0;i<arr.length;i++){
if(typeof(arr[i])!=="number"){
arr.splice(i,1);
i--;
}
}
}
filterNumericInPlace(arr);
console.log(arr) // [1,3,4,5,2]
10.寫(xiě)一個(gè)ageSort函數(shù)實(shí)現(xiàn)數(shù)組中對(duì)象按age從小到大排序
var john = { name: "John Smith", age: 23 };
var mary = { name: "Mary Key", age: 18 };
var bob = { name: "Bob-small", age: 6 };
var people = [ john, mary, bob ];
function ageSort(people){
people.sort(function(a,b){
return a.age-b.age;
})
}
console.log(people)//輸出結(jié)果如下:
/*[Object, Object, Object]
0:Object
age:6
name:"Bob-small"
__proto__:Object
1:Object
age:18
name:"Mary Key"
__proto__:Object
2:Object
age:23
name:"John Smith"
__proto__:Object
length:3
__proto__:Array[0]
*/
11.寫(xiě)一個(gè)filter(arr, func) 函數(shù)用于過(guò)濾數(shù)組熔掺,接受兩個(gè)參數(shù),第一個(gè)是要處理的數(shù)組非剃,第二個(gè)參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個(gè)數(shù)組元素置逻,當(dāng)函數(shù)返回true時(shí)保留該元素,否則刪除該元素)备绽。實(shí)現(xiàn)如下功能
arr = ["a",3,4,true, -1, 2, "b"]
arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2], 過(guò)濾出數(shù)字
arr = filter(arr, isInt);//arr=[3,4,2]
代碼如下:
//構(gòu)造回調(diào)函數(shù)從數(shù)組中篩選出數(shù)字券坞、為正數(shù)的數(shù)字
//構(gòu)造函數(shù)篩選出數(shù)字
arr = ["a",3,4,true, -1, 2, "b"];
function isNumeric(el){
if(typeof(el)==="number"){
return el;
}
}
function filter(arr,isNumeric){
var newarr=arr.filter(isNumeric);
return newarr;
}
filter(arr,isNumeric)//輸出結(jié)果[3,4,-1,2]
//構(gòu)造函數(shù)篩選出數(shù)字,且數(shù)字是正數(shù)
arr = ["a",3,4,true, -1, 2, "b"];
function isInt(el){
if(typeof(el)==="number" && el>=0){
return el
}
}
function filter(arr,isInt){
var newarr2=arr.filter(isInt);
return newarr2;
}
filter(arr,isInt)//輸出結(jié)果[3,4,2]
12.寫(xiě)一個(gè) ucFirst函數(shù)肺素,返回第一個(gè)字母為大寫(xiě)的字符.
//實(shí)現(xiàn) ucFirst("hunger") == "Hunger"
function ucFirst(el){
var newstring=el[0].toUpperCase()+el.substring(1)
return newstring;
}
ucFirst("hunger")
//返回結(jié)果為 "Hunger"
13.寫(xiě)一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength恨锚,會(huì)把str截?cái)嗟絤axlength長(zhǎng),并加上...倍靡,如下
truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"
代碼如下:
function truncate(str,maxlength){
if(str.length>maxlength){
return str.substring(0,maxlength)+"...";
} else{
return str.substring(0,maxlength);
}
}
truncate("hello, this is hunger valley,", 10));//返回"hello, thi..."
truncate("hello world", 20))//返回"hello world"
14.寫(xiě)一個(gè)函數(shù)猴伶,獲取從min到max之間的隨機(jī)整數(shù),包括min不包括max
function randomnum1(el1,el2){
return Math.floor(Math.random()*(el2-el1)+el1);//向下取整數(shù)
}
15.寫(xiě)一個(gè)函數(shù)塌西,獲取從min都max之間的隨機(jī)整數(shù)他挎,包括min包括max
function randomnum2(el1,el2){
return Math.floor(Math.random()*(el2-el1+1)+el1)
}
16.寫(xiě)一個(gè)函數(shù),獲取一個(gè)隨機(jī)數(shù)組雨让,數(shù)組中元素為長(zhǎng)度為len雇盖,最小值為min,最大值為max(包括)的隨機(jī)整數(shù)
function randomnum3(len,min,max){
var newarr=[];
for(var i=0;i<len;i++){
newarr[i]=Math.floor(Math.random()*(max-min+1)+min)
}
return newarr
}
17.寫(xiě)一個(gè)函數(shù)栖忠,生成一個(gè)長(zhǎng)度為 n 的隨機(jī)字符串崔挖,字符串字符的取值范圍包括0到9贸街,a到 z,A到Z
function getRandStr(len){
var str="0123456789abcdefthijklmnopqrstuvwxyzABCDEFTHIJKLMNOPQRSTUVWXYZ"
var newstr=[];
for(var i=0;i<len;i++){
newstr[i]=str[Math.floor(Math.random()*(str.length+1))]
}
return newstr.join("");
}
var str = getRandStr(3);