數(shù)組方法
-
模擬堆棧
- push 在數(shù)組尾部添加數(shù)據(jù)
arr.push( 需要添加的元素,不添加也不報錯 ): 返回數(shù)組的元素個數(shù)
var a = [1];
a.push('abc') //2
console.log(a);//[1,'abc'];
- pop 刪除數(shù)組 最后一個元素
arr.pop (不需放值氛什,放了不報錯也不生效 ): 返回被刪除的元素本身
var a = [1,2,3];
a.pop() //3
console.log(a);//[1,2];
-
模擬隊列
- unshift 在數(shù)組頭部添加數(shù)據(jù)
arr.unshift ( 需要添加的元素,不添加也不報錯 ) // 返回數(shù)組的元素個數(shù)
var a = [1,2,3];
a.unshift(4,5) //5
console.log(a);//[4,5负芋,1,2散庶,3];
- shift 刪除數(shù)組 第一個元素
arr.shift ( 不需放值不傅,放了不報錯也不生效 ) // 返回被刪除的元素本身
var a = [1,2,3];
a.shift(4,5) //2
console.log(a);//[1,2];
-
連接分割
- join 把參數(shù)作為分隔符茴厉,數(shù)組所有元素連接成一個字符串返回
arr.join ( 放入分隔符泽台,不放默認為逗號 ) // 返回字符串
var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"
- split 按規(guī)則分割字符串,返回一個由分割出來的子字符串組成的數(shù)組
'輸入字符串'.split('輸入分隔符') // 返回數(shù)組
例子
-
splice
-
一次完成添加刪除
arr.splice ( 位置,數(shù)量,項目,.....,項目) // [返回被刪除的項目組成的數(shù)組]
----> 替換
arr.splice ( 位置, 0 ,項目,.....,項目)
-----> 添加
arr.splice ( 位置,數(shù)量)
-------------------------> 刪除
var a = [1, 2, 3, 4, 5];a.splice(2,1,6) // [3] ----------------> 替換 console.log(a) // [1, 2, 6, 4, 5] a.splice(2,0,6) // [3] -----------------> 添加 console.log(a) // [1, 2, 6, 3, 4, 5] a.splice(2,0) // [3] -------------------> 刪除 console.log(a) // [1, 2, 4, 5]
tips:
1位置
=絕對索引數(shù)
而不是相對于數(shù)組索引
2數(shù)量
=刪除執(zhí)行次數(shù)
而不是刪除元素的個數(shù)
var a = new Array();
a[2]=2; a[3]=3; a[7]=4; a[8]=5;
console.log(a)//[ 2, 3, 4, 5]
//即[undefined, undefined, 2, 3, undefined, undefined, undefined, 4, 5]
console.log(a.splice(3,4)); //[3]
console.log(a)//[ 2, 4, 5]
//即[undefined, undefined, 2, 4, 5]-
應用
用splice
完成實現(xiàn)push
矾缓、pop
怀酷、shift
、unshift
方法function push(arr, val) { arr.splice(arr.length, 0, val); -------> 末位 添加 -------> push return arr.length; } function pop(arr) { var tmpArr = arr.splice(arr.length - 1, 1); -------> 末位 刪除 -------> pop return tmpArr[0]; } function shift(arr) { var tmpArr = arr.splice(0, 1); -------> 首位 刪除 -------> shift return tmpArr[0]; } function unshift(arr, val) { arr.splice(0, 0, val); -------> 首位 添加 -------> unshift return arr.length; }
數(shù)組遍歷
for 循環(huán)
var a = [1, 2, 3];
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}-
while 循環(huán)
var a = [1, 2, 3];var i = 0; ----------------->正向遍歷 while (i < a.length) { console.log(a[i]); i++; } var l = a.length; ----------->逆向遍歷 while (l--) { console.log(a[l]); }
for …in 循環(huán)
由于for …in
不但遍歷數(shù)字鍵嗜闻,還遍歷非數(shù)字鍵蜕依,所以不推薦
應用
數(shù)組
- 使用數(shù)組拼接出 字符串
<dl class="product">
<dt>女裝</dt>
<dd>短款</dd>
<dd>冬季</dd>
<dd>春裝</dd>
</dl>
顯示列表:拼接html標簽,遍歷項目內容
var prod = {
name: '女裝',
styles: ['短款', '冬季', '春裝']
};
function getTplStr(data) {
var tpl = '<dl class="product">';
tpl += '<dt' + data.name + '</dt>';
for (var i = 0; i < prod.styles.length; i++) {
tpl += '<dd>' + data.styles[i] + '</dd>';
}
tpl += '</dl>';
return tpl;
}
- 寫一個find函數(shù)琉雳,實現(xiàn)下面的功能
var arr = [ "test", 2, 1.5, false ]
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1
.indexOf(指定元素) // 返回 第一個指定元素的位置索引 or 沒有查找到返回-1
function find(data,val){
return data.indexOf(val);
}
- 寫一個函數(shù)filterNumeric样眠,把數(shù)組 arr 中的數(shù)字過濾出來賦值給新數(shù)組newarr, 原數(shù)組arr不變
arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr); // [1,3,5,2]
.filter(function(element)) //
返回數(shù)組的一個子集
咐吼,回調函數(shù)用于邏輯判斷是否返回,
返回true則把當前元素加入到返回數(shù)組中商佑,false則不加
新數(shù)組只包含返回true的值锯茄,索引缺失的不包括,原數(shù)組保持不變
arr = ["a", "b", 1, 3, 5, "b", 2];
function filterNumberic(arr){
return arr.filter(function(e){
return typeof e === "number"
})
}
newarr = filterNumberic(arr); //[1,3,5,2]
-
對象obj有個className屬性茶没,里面的值為的是空格分割的字符串(和html元素的class特性類似)肌幽,寫
addClass
、removeClass
函數(shù)抓半,有如下功能:
var obj = {
className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open') // 因為open已經存在喂急,所以不會再次添加 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') // 因為blabla不存在廊移,所以此操作無任何影響
addClass
函數(shù):
var obj = {
className: 'open menu'
};
function addClass(obj,ele){
var arr = obj.className.split(' '); ------> 字符串拆成 數(shù)組
for(i=0;i<arr.length;i++){ ------> 遍歷數(shù)組
if (arr[i] === ele) { ------>判斷參數(shù)是否存在
return; ------>存在,返回原數(shù)組
}else{
arr.push(ele); ------>不存在探入,末位加入?yún)?shù)
obj.className = arr.join(' '); ------>數(shù)組合并為 字符串
}
}
}
removeClass
函數(shù)
var obj = {
className: 'open menu'
};
function removeClass(obj,ele){
var arr = obj.className.split(' '); ------> 字符串拆成 數(shù)組
if(arr.indexOf (ele) === -1){ ------> 搜索參數(shù)狡孔,是否存在
return; ------>不存在,返回原數(shù)組
}else{
arr.splice(arr.indexOf (ele) , 1 ); ------>存在蜂嗽,去掉此參數(shù)
obj.className = arr.join(' '); ------>數(shù)組合并為 字符串
}
}
- 寫一個
camelize
函數(shù)苗膝,把my-short-string
形式的字符串轉化成myShortString
形式的字符串?
camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'
去掉分隔符
function camelize(data){
var a = data.split('-');
return a.join('')
}
分析輸出結果
arr = ["a", "b"]; //數(shù)組內有兩個元素
arr.push( function() { //數(shù)組末尾添加一個匿名元素為函數(shù)
alert(console.log('hello hunger valley'))
} );
arrarr.length-1 // 調用這個匿名函數(shù),控制臺打印出 "hello hunger valley"
因為是匿名函數(shù),彈框顯示undefined寫一個函數(shù)
isPalindrome
,判斷一個字符串是不是回文字符串
arr.reverse() // 返回一個倒序數(shù)組
function isPalindrome(data){
var arr = data.split('');
if(data == arr.reverse( ).join('') ){
return true;
}else{
return false;
}
}
- 寫一個
ageSort
函數(shù)實現(xiàn)數(shù)組中對象按age從小到大排序
array.sort( sortFunction ) 參數(shù)可選植旧。規(guī)定排序順序辱揭。必須是函數(shù)离唐。 參考
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)
function ageSort(data){
data.sort( function(a,b){
return a.age - b.age ;
)}
}
console.log(people) ;
- 寫一個filter(arr, func) 函數(shù)用于過濾數(shù)組,接受兩個參數(shù)问窃,第一個是要處理的數(shù)組亥鬓,第二個參數(shù)是回調函數(shù)(回調函數(shù)遍歷接受每一個數(shù)組元素,當函數(shù)返回true時保留該元素泡躯,否則刪除該元素)贮竟。實現(xiàn)如下功能:
console.log(people);
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ù)
function isNumber (el){
return typeof el === 'number';
}
filter(arr, func)
函數(shù)
function filter(arr,func){
new a = [];
for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] === 'number') {
newArr.push(arr[i]);
}
}
return a;
}
字符串
- 寫一個
ucFirst
函數(shù),返回第一個字母為大寫的字符
ucFirst("hunger") == "Hunger"
str.toUpperCase() // 返回調用該方法的字符串值轉換為大寫形式
function ucFirst(str){
return str[0].toUpperCase()+str.slice(1,str.length);
}
-
寫一個函數(shù)
truncate(str, maxlength)
, 如果str的長度大于maxlength较剃,會把str截斷到maxlength長咕别,并加上...,如
truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"
truncate(str, maxlength)
函數(shù)funtion tiun(str, maxlenght){ var newstr if(str.length <= maxlength){ return str ; return newstr = str.slice(0 ,maxlength) + "…"; } }
數(shù)學函數(shù)
- 寫一個函數(shù)写穴,獲取從min到max之間的隨機整數(shù)惰拱,
rand(min,max) 函數(shù)返回隨機整數(shù) (min,max可選。規(guī)定隨機數(shù)產生的范圍)
包括min不包括max
function getRandStr(min,max){
return Math.floor(Math.random()*(max-min))
}
包括min包括max
function getRandStr(min,max){
return Math.floor(Math.random()*(max-min+1))+min
}
獲取一個隨機數(shù)組啊送,數(shù)組中元素為長度為len偿短,最小值為min,最大值為max(包括)的隨機數(shù)
function randArr(len, min, max) {
var arr = [], randVal;
for (var i = 0; i < arr.length; i++) {
randVal = min + Math.floor(Math.random() * (max - min + 1));
arr.push(randVal);
} return randArr;
}寫一個函數(shù)馋没,生成一個長度為 n 的隨機字符串昔逗,字符串字符的取值范圍包括0到9,a到 z篷朵,A到Z
function getRandStr(len) {
var retStr = '', randIdx, dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (var i = 0; i < len; i++) {
randIdx = Math.floor(Math.random() * dict.length);
retStr += dict[randIdx];
}
return retStr;
}