1. 數(shù)組方法里pop
,push
眷昆,shift
蜒秤,unshift
汁咏,join
,split
分別有什么作用作媚?
var arr = [3, 5, 6, 3, 8, 3, 9]
i. pop
的作用是刪除數(shù)組的最后一個元素
arr.pop () // [3, 5, 6, 3, 8, 3]
ii.``` push```的作用是在數(shù)組最后添加一個元素
- ```
arr.push (10) // [3, 5, 6, 3, 8, 3, 9, 10]
iii.shift
的作用是在刪除數(shù)組的第一個元素
arr.shift () // [5, 6, 3, 8, 3, 9]
iv.```unshift```的作用是在數(shù)組的最前面添加一個元素
- ```
arr.unshift (12) // [12, 3, 5, 6, 3, 8, 3, 9]
v.join
方法的作用是將數(shù)組使用參數(shù)作為連接符鏈接成一個字符串攘滩,不會修改原數(shù)組的內(nèi)容
arr.join ( '-' ) // '3-5-6-3-8-3-9'
vi.```split```方法可以用來增加、刪除纸泡、插入或修改數(shù)組中的元素
- ```
var arr = [1, 5, 7, 3, 21, 32]
- 刪除
arr. splice (1, 2) // [1, 3, 21, 32] ```
- 添加
arr. splice (2, 0, 8, 9) // [1, 5, 8, 9, 7, 3, 21, 32]```
- 插入/修改
arr. splice (2, 0, 5, 4) // [1, 5, 5, 4, 7, 3, 21, 32]
arr. splice (2, 3, 6, 7) // [1, 5, 6, 7, 32]
代碼題
* <u>數(shù)組</u> *
1. 用splice
實現(xiàn)pop
漂问,push
,shift
女揭,unshift
方法
// pop 方法 --------------------- var arr1 = [2, 6, 2, 8, 4, 9]; function pop(arr) { var a = arr[arr.length-1] arr.splice (arr.length-1, 1); return a; } // push 方法 --------------------- var arr2 = [2, 6, 2, 8, 4, 9]; function push(arr, val) { arr.splice (arr.length, 0, val); return arr.length; } // shift 方法 --------------------- var arr3 = [2, 6, 2, 8, 4, 9]; function shift(arr) { arr.splice (0,1); return arr(0); } // unshift 方法 --------------------- var arr4 = [2, 6, 2, 8, 4, 9]; function unshift(arr, val) { arr.splice (0,0,val); return arr.length; }
###2. 使用數(shù)組拼接出如下字符串:
[代碼鏈接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-2%E6%95%B0%E7%BB%84.html)
- ```
var prod = {
name: '女裝',
styles: ['短款', '冬季', '春裝']
};
function getTpl(data){
var tp1 = '<dl class="product">';
tp1 += '<dt>' + data.name + '</dt>';
for (var i = 0; i < data.styles.length; i++) {
tp1 += '<dd>' + data.styles[i] + '</dd>';
}
tp1 += '</dl>';
return tp1;
};
var result = getTpl(prod);
console.log (result);
3. 寫一個find函數(shù)级解,實現(xiàn)下面功能
var arr = [ "test", 2, 1.5, false ] function find(arr,val) { for (var i=0; i<arr.length; i++) { if (arr[i] === val) { var a = i; }; } var b = a != undefined ? a : -1; return b } find(arr, "test") // 0 find(arr, 2) // 1 find(arr, 0) // -11
###4. 寫一個函數(shù)```filterNumeric```,把數(shù)組 ```arr```中的數(shù)字過濾出來賦值給新數(shù)組```newarr```田绑, 原數(shù)組```arr```不變
[代碼鏈接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-4%E6%95%B0%E7%BB%84.html)
- ```
var arr = ["a", "b", 1, 3, 5, "b", 2];
function filterNumeric(arr) {
var newarr = [];
for (var i=0; i<arr.length; i++) {
if (typeof arr[i] === 'number') {
newarr.push(arr[i]);
};
};
return newarr;
}
newarr = filterNumeric(arr); // [1,3,5,2]
5. 對象obj
有個className
屬性勤哗,里面的值為的是空格分割的字符串(和html
元素的class
特性類似),寫addClass
掩驱、removeClass
函數(shù)芒划,有如下功能:
var obj = { className: 'open menu' } // 定義函數(shù) addClass(obj,str) ------------------------------------------ function addClass(obj,str) { var a = true; var b, c; var arr = (obj.className).split(' '); // 將字符串轉(zhuǎn)化為數(shù)組 for (var i=0; i<arr.length;i++) { // 遍歷數(shù)組arr,判斷數(shù)組中是否有與str相同的元素 if (arr[i] === str) { a = false; // 若存在欧穴,a改為false }; }; arr.push(str); // 將str添加到數(shù)組arr最后 b = str + '不存在民逼,所以' + 'obj.className變?yōu)? + '\'' + arr.join(' ') + '\''; c = '因為'+ str + '已經(jīng)存在,所以不會再次添加' + str; if (a) { obj.className = arr.join(' '); return b; } else { return c; } } addClass(obj, 'new') // obj.className='open menu new' addClass(obj, 'open') // 因為open已經(jīng)存在涮帘,所以不會再次添加open addClass(obj, 'me') // me不存在拼苍,所以 obj.className變?yōu)?open menu new me' console.log(obj.className) // "open menu new me" // 定義函數(shù) removeClass(obj,str) --------------------------------------- function removeClass(obj,str) { var a = false; var b, c, d; var arr = (obj.className).split(' '); // 將字符串轉(zhuǎn)化為數(shù)組 for (var i=0; i<arr.length;i++) { // 遍歷數(shù)組,判斷arr中是否存在與str相同的元素 if (arr[i] === str) { a = true; // 如果存在相同元素调缨,a變?yōu)閠rue arr.splice (i, 1) // 在arr中將相同的元素刪除 }; }; b = arr.join(' '); c = '去掉obj.className里面的' + str + '疮鲫,變成' + '\'' + b + '\''; d = '因為' + str + '不存在,所以此操作無任何影響'; if (a) { obj.className = b; return c; } else { return d } } removeClass(obj, 'open') // 去掉obj.className里面的 open弦叶,變成'menu new me' removeClass(obj, 'blabla') // 因為blabla不存在俊犯,所以此操作無任何影響
###6. 寫一個```camelize```函數(shù),把```my-short-string```形式的字符串轉(zhuǎn)化成```myShortString```形式的字符串伤哺,如
[代碼鏈接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-6%E6%95%B0%E7%BB%84.html)
- ```
function camelize(str) {
var arr = str.split('-');
if (arr.length < 2) {
return;
}
for (var i = 1; i < arr.length; i++) {
arr[i] = arr[i].replace(arr[i][0], arr[i][0].toUpperCase());
}
return arr.join('');
}
7. 如下代碼輸出什么燕侠?為什么?
arr = ["a", "b"]; arr.push( function() { alert(console.log('hello hunger valley')) } ); // 此時arr變?yōu)閇"a","b",function(){...}] arr[arr.length-1]() // 調(diào)用函數(shù)立莉,故輸出'hello hunger valley'绢彤,彈窗undefined
###8. 寫一個函數(shù)```filterNumericInPlace```,過濾數(shù)組中的數(shù)字蜓耻,刪除非數(shù)字茫舶。要求在原數(shù)組上操作
[代碼鏈接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-8%E6%95%B0%E7%BB%84.html)
- ```
arr = ["a", "b", 1, 3, 4, 5, "b", 2];
//對原數(shù)組進(jìn)行操作,不需要返回值
function filterNumericInPlace(arr) {
for (var i = arr.length-1; i>=0; i--) { // 因為是在原數(shù)組上操作媒熊,所以如果遞增奇适,會出現(xiàn)改變未經(jīng)判斷的元素的索引號坟比,導(dǎo)致漏刪,倒數(shù)遞減則會避免這種情況
if (typeof(arr[i]) != 'number') {
arr.splice (i,1);
}
}
}
filterNumericInPlace(arr);
console.log(arr) // [1,3,4,5,2]
9. 寫一個ageSort
函數(shù)實現(xiàn)數(shù)組中對象按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(arr) { arr.sort(function(a, b){return a.age - b.age;}); } /* function ageSort(arr) { arr.sort( function(p1,p2) { return p1.age > p2.age; } ) } */ ageSort(people) // [ bob, mary, john ]
###10. 寫一個```filter(arr, func)```函數(shù)用于過濾數(shù)組嚷往,接受兩個參數(shù)葛账,第一個是要處理的數(shù)組,第二個參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個數(shù)組元素皮仁,當(dāng)函數(shù)返回```true```時保留該元素籍琳,否則刪除該元素)。實現(xiàn)如下功能:
[代碼鏈接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-10%E6%95%B0%E7%BB%84.html)
- ```
function isNumeric (el){
return typeof el === 'number';
}
arr = ["a",3,4,true, -1, 2, "b"]
function filter(arr,func) {
for (var i = arr.length-1; i>=0; i--) {
if (func(arr[i]) === false) {
arr.splice(i,1);
};
};
return arr;
}
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ù)
* <u>字符串</u> *
11. 寫一個 ucFirst
函數(shù)贷祈,返回第一個字母為大寫的字符
function ucFirst(str) { var arr = str.split(''); arr[0] = arr[0].toUpperCase(); return arr.join(''); } ucFirst("hunger") // "Hunger"
###12. 寫一個函數(shù)```truncate(str, maxlength)```, 如果```str```的長度大于```maxlength```趋急,會把```str```截斷到```maxlength````長,并加上...势誊,如:
[代碼鏈接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-12%E5%AD%97%E7%AC%A6%E4%B8%B2.html)
- ```
function truncate(str,num) {
var arr = str.split('');
if (arr.length > num) {
arr.length = num;
arr[arr.length-1] = arr[arr.length-1] + '...';
return arr.join('');
} else {
return str;
}
}
// truncate("hello, this is hunger valley,", 10) == "hello, thi...";
// truncate("hello world", 20)) == "hello world"
* <u>數(shù)學(xué)函數(shù)</u> *
13. 寫一個函數(shù)呜达,獲取從min到max之間的隨機整數(shù),包括min不包括max
function randomNumber1(min,max) { return parseInt(Math.random()*(max-min)+min); }
###14. 寫一個函數(shù)粟耻,獲取從min都max之間的隨機整數(shù)查近,包括min包括max
- ```
function randomNumber2(min,max) {
return parseInt(Math.random()*(max-min+1)+min);
}
15. 寫一個函數(shù),獲取一個隨機數(shù)組挤忙,數(shù)組中元素為長度為len霜威,最小值為min,最大值為max(包括)的隨機整數(shù)
function randomArr(min,max,len) { var arr = []; for (var i=0; i<len; i++) { arr[i] = randomNumber2(min,max); } return arr; }
###16. 寫一個函數(shù)册烈,生成一個長度為 n 的隨機字符串戈泼,字符串字符的取值范圍包括0到9,a到 z赏僧,A到Z大猛。
- ```
var DataRange = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
function getRandStr (len) {
var arr = [];
var n;
for (var i=0; i<len; i++) {
n = parseInt(Math.random()*62);
arr[i] = DataRange[n];
}
return arr.join('');
}
本教程版權(quán)歸本人和饑人谷所有,轉(zhuǎn)載請注明來源次哈。