問答
數(shù)組方法里push、pop士败、shift闯两、unshift、join谅将、split分別是什么作用?
- push 從字面意義講有推得意思漾狼,然而在JavaScript數(shù)組中他的作用是在數(shù)組末尾推入push后括號(hào)里的內(nèi)容;而pop從字面意義上講其有出現(xiàn)饥臂、伸出之意逊躁,在數(shù)組中其與push剛好相反,則是在數(shù)組末尾刪除pop后括號(hào)里的內(nèi)容擅笔。例如:
var a =[2,3,4,5]
a.push(1)
5 //這里顯示原數(shù)組+新推入的內(nèi)容之后 數(shù)組的長(zhǎng)度
a
[2, 3, 4, 5, 1]
a.pop(1)
1 //顯示所刪除的內(nèi)容
a
[2, 3, 4, 5]
- shift的英文意思有去掉之意志衣,因此在JavaScript數(shù)組中是指去掉(刪除)第一項(xiàng)shift()括號(hào)里的內(nèi)容。而unshift正好與此相反猛们,則是在數(shù)組中第一項(xiàng)之前加入unshift()括號(hào)里的內(nèi)容念脯。例如:
var b =[2,3,4,5]
b.shift(2)// 刪除數(shù)組里的2
2
b //檢查下刪除后的數(shù)組b
[3, 4, 5]
b.unshift(0,1,2)//在數(shù)組中加入0,1,2
6 //顯示數(shù)組b加入新內(nèi)容后的總長(zhǎng)度
b
[0, 1, 2, 3, 4, 5]
- join從字面意義上講就有連接的意思,而在數(shù)組中是將數(shù)組里的內(nèi)容拼接成一個(gè)字符串弯淘,而且不會(huì)改變?cè)瓟?shù)組绿店。例如:
var x=[1,2,3,4]
x.join("-")
"1-2-3-4"
x
[1, 2, 3, 4]
x.join('*')
"1*2*3*4"
x
[1, 2, 3, 4]
- split從字面意義上講是分裂,分開的意思庐橙;而在JavaScript中split() 方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組假勿;
而字符串是由單引號(hào)或雙引號(hào)包裹的字符序列,在使用split()后則可轉(zhuǎn)換成數(shù)組态鳖。但是同樣不會(huì)改變?cè)械淖址?/li>
var str="a,b,c,d,e";
str.split();
["a,b,c,d,e"]
str
"a,b,c,d,e"
str.split("*");
["a,b,c,d,e"]
str.split(' ')
["a,b,c,d,e"]
str.split('* *');
["a,b,c,d,e"]
var str2 ="hello,world";
undefined
str2.split();
["hello,world"]
str2
"hello,world"
str2.split('',1)
["h"]
str2
"hello,world"
str2.length //查看下str2的長(zhǎng)度
11 顯示為11转培,在此證明""里的所有字符都是有效的。
代碼
用 splice 實(shí)現(xiàn) push浆竭、pop浸须、shift、unshift方法邦泄?
- push是在對(duì)象的末尾添加字符删窒,那么他在用splice(a,b,c)表示的時(shí)候應(yīng)該也必須是能在末尾添加,函數(shù)如下:
var arr =[2,3,4,5,6];
function push(arr,val){
arr.splice(arr.length,0,val);//其中val代表需要push的值顺囊,經(jīng)過測(cè)試該函數(shù)一次只能push一個(gè)值.
return arr.length;//返回?cái)?shù)組的長(zhǎng)度}
//欲多push幾個(gè)值肌索,可以多加幾個(gè)val.
function push(arr,val,val2,val3){
arr.splice(arr.length,0,val,val2,val3);
return arr.length; //返回?cái)?shù)組的長(zhǎng)度
}
- pop是在數(shù)組的末尾刪除字符,而splice中刪除的時(shí)候末尾一位的索引是length-1特碳,所以函數(shù)如下:
function pop(arr){
arr.splice(arr.length-1,1);
return arr.length;
}
*shift是去除數(shù)組的第一位诚亚,而在splice中刪除第一位索引則為0晕换,個(gè)數(shù)必須等于1,大于1的時(shí)候就是截取幾位,函數(shù)如下:
function shift(arr){
arr.splice(0,1);
return arr.length;
}
- unshift則是指在數(shù)組的第一位之前加入字符或者值亡电,因此其函數(shù)為:
function unshift(arr,val){
arr.splice(0,0,val);
return arr.length;}
綜上函數(shù)只適用于添加一個(gè)數(shù)字届巩,欲添加多個(gè)數(shù)字或者字符,請(qǐng)?jiān)O(shè)置多個(gè)變量val.
使用數(shù)組拼接出如下字符串 :
var prod = { name: '女裝',
styles: ['短款', '冬季', '春裝']};
function getTpl(data){
//todo...};
var result = getTplStr(prod); //result為下面的字符串
<dl class="product">
<dt>女裝</dt>
<dd>短款</dd>
<dd>冬季</dd>
<dd>春裝</dd>
</dl>
代碼如下:
function getTpl(data){
var htmls=[];
htmls.push('<dl class="product">');
htmls.push('<dt>'+data.name+'</dt>');
for(var i=0;i<data.styles.length;i++){
htmls.push('<dd>'+data.styles[i]+'</dd>'); } // 遍歷styles里邊的每一項(xiàng)份乒;
htmls.push('</dl>');
console.log(htmls.join(''));} //拼接html里的字符
getTpl(prod);//執(zhí)行函數(shù)
寫一個(gè)find函數(shù)恕汇,實(shí)現(xiàn)下面的功能 (***)
var arr = [ "test", 2, 1.5, false ];
find(arr, "test") // 0
find(arr, 2) //
1find(arr, 0) // -1
函數(shù)如下:
var arr = [ "test", 2, 1.5, false ];
function find(arr,val){
var i=0;
i<arr.length;
i++;
if(val ===arr[i]){
console.log(i); }
else{
console.log(-1); }}
寫一個(gè)函數(shù)filterNumeric,把數(shù)組 arr 中的數(shù)字過濾出來賦值給新數(shù)組newarr或辖, 原數(shù)組arr不變
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]
函數(shù)代碼如下:
function filterNumeric(arr){
var arr1=arr.slice(2,5);
var arr2=arr.slice(6,7);
console.log(arr1.concat(arr2));};
對(duì)象obj有個(gè)className屬性瘾英,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫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ì)再次添加
openaddClass(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不存在,所以此操作無任何影響
函數(shù)代碼如下:
var obj = {
className: 'open menu' };
function addClass(obj,val){
var arr =obj.className.split( ' '); //將obj.classname轉(zhuǎn)化成數(shù)組县爬。
console.log(arr); // 看下轉(zhuǎn)化后的數(shù)組
for(var i=0;i<arr.length;i++){
if(val ===arr[i]){ //條件判斷下
return; }
else{
arr.push(val); }
}
console.log(arr); //在顯示下添加字符后的數(shù)組
obj.className=arr.join( ' ') } 將轉(zhuǎn)化后的數(shù)組重新賦值給obj.className
//remove函數(shù):
function removeClass(obj,val){
var arr =obj.className.split( ' ');
console.log(arr);
for (var i = 0; i < arr.length; i++) {
if (val === arr[i]) {
arr.splice(i, 1);
} }
obj.className = classArr.join(' '); }
寫一個(gè)camelize函數(shù)阳啥,把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串,如:
var str ="list-style-image";
function camelize(str) {
var arr=str.split("-"); //將字符串轉(zhuǎn)化成數(shù)組
for(var i=0;i<arr.length;i++){
arr[i]=arr[i].replace(arr[i][0],arr[i][0].toUpperCase()); //首字母替換成大寫 }
return arr.join( ''); }
camelize(str);
如下代碼輸出什么财喳?為什么? (***)
arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );
arr[arr.length-1]() // ?
在上面這段代碼中察迟,arr.push說明是向數(shù)組arr中末尾推入元素,現(xiàn)在push后的括號(hào)內(nèi)是一個(gè)函數(shù)耳高,經(jīng)過分析該函數(shù)表達(dá)結(jié)果就是一個(gè)函數(shù)因此是向arr數(shù)組中推入function函數(shù)扎瓶。如下:
["a", "b", anonymous()]
而arr[arr.length-1]()毫無意義的標(biāo)識(shí),因此會(huì)報(bào)錯(cuò)泌枪。
寫一個(gè)函數(shù)filterNumericInPlace概荷,過濾數(shù)組中的數(shù)字,刪除非數(shù)字碌燕。要求在原數(shù)組上操作:
arr = ["a", "b", 1, 3, 4, 5, "b", 2];
function filterNumericInPlace(arr){
for(var i=0;i<arr.length;i++){
if(typeof arr[i] !=="number"){
arr.splice(i,1);
i--;
}
}
}
filterNumericInPlace(arr);
console.log(arr);
寫一個(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 ]
ageSort(people) // [ bob, mary, john ]
代碼:
function ageSort(arr){
arr.sort(function(a,b){
return a.age-b.age;});}
ageSort(people);
console.log(people);
寫一個(gè)filter(arr, func)函數(shù)用于過濾數(shù)組乍赫,接受兩個(gè)參數(shù),第一個(gè)是要處理的數(shù)組陆蟆,第二個(gè)參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個(gè)數(shù)組元素,當(dāng)函數(shù)返回true時(shí)保留該元素惋增,否則刪除該元素)叠殷。實(shí)現(xiàn)如下功能:
function isNumeric (el){ return typeof el === 'number'; }
arr = ["a",3,4,true, -1, 2, "b"]
arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2],
過濾出數(shù)字arr = filter(arr, function(val) { return typeof val === "number" && val > 0 });
// arr = [3,4,2] 過濾出大于0的整數(shù)
代碼如下:
// 先篩選數(shù)組函數(shù)如下:
arr = ["a",3,4,true, -1, 2, "b"];
function isNumeric(arr){
for(var i=0;i<arr.length;i++){
if(typeof arr[i] !=="number" ){
arr.splice(i,1); }
}
console.log(arr); }
isNumeric(arr); //篩選出數(shù)組里邊的數(shù)字 顯示arr=[3,4,-1,2];
function fitter(arr){
for(var j=0;j<arr.length;j++){
if(arr[j]< 0){
arr.splice(j,1);
} }
console.log(arr);
}
fitter(arr);// 返回?cái)?shù)組arr=[3,4,2];
字符串
寫一個(gè) ucFirst函數(shù),返回第一個(gè)字母為大寫的字符:
ucFirst("hunger") == "Hunger"
函數(shù)如下:
var str="hello";
function ucFirst(str){
return str[0].toUpperCase()+str.slice(1);}
ucFirst(str);
寫一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength诈皿,會(huì)把str截?cái)嗟絤axlength長(zhǎng)林束,并加上...
像棘,如 :
代碼如下:
var str = "hello world";
function truncate(str,maxLength){
if(str.length <= str.maxLength){
return str; }else{
return str.slice(0,maxLength)+'....'; } }
console.log(truncate("baby,I love you",10));
// 返回baby,I lov....
數(shù)學(xué)函數(shù)
寫一個(gè)函數(shù),獲取從min到max之間的隨機(jī)整數(shù)壶冒,包括min不包括max :
function rand1(min.max){
retrun Math.floor(Math.random()* (max - min) + min);
}
寫一個(gè)函數(shù)缕题,獲取從min都max之間的隨機(jī)整數(shù),包括min包括max:
function rand2(min,max){
retrun Math.floor(Math.random()*(++max-min)+min);
}
寫一個(gè)函數(shù)胖腾,獲取一個(gè)隨機(jī)數(shù)組烟零,數(shù)組中元素為長(zhǎng)度為len,最小值為min咸作,最大值為max(包括)的隨機(jī)整數(shù):
function rand3(len,min,max) {
var arr = [];
for(var i = 0; i < len; i++){
arr.push(Math.floor(Math.random()* (max+1-min)) + min);
}
return arr;
}
console.log(rand3(20,1,10));
//返回[6, 3, 2, 8, 1, 2, 9, 2, 5, 2, 8, 7, 10, 2, 3, 2, 7, 8, 5, 1]
寫一個(gè)函數(shù)锨阿,生成一個(gè)長(zhǎng)度為 n 的隨機(jī)字符串,字符串字符的取值范圍包括0到9记罚,a到 z墅诡,A到Z。:
function getRandStr(len){
var str = '';
var obj= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for(var i = 0; i < len; i++){
str += dict[Math.floor(Math.random()*obj.length)];
}
return str;
}
var str = getRandStr(8);
console.log(str);
// 返回oXivFBGj