創(chuàng)建數(shù)組
- 構造函數(shù)
var a1 = new Array(5);
console.log(a1.length);//5
console.log(a1); //[] ,數(shù)組是空的
- 字面量
var b = [1, 2, 'hello'];
基本方法:push颖对、pop、shift磨隘、unshift缤底、join、splice番捂、sort个唧、join、reverse设预、concat;
var arr = [ 0,1,1,2,3,5,8,13,21,34,55]
arr.push("a");
console.log(arr);
arr.pop("a");
console.log(arr);
arr.unshift("a");
console.log(arr);
arr.shift("a");
console.log(arr);
arr.splice(2,2,"a" ,"b");
console.log(arr);
console.log(arr.join("/"));
var arr1=["b"];
console.log(arr.concat(arr1));
console.log(arr);
console.log(arr.reverse());
console.log(arr.sort());
arr.sort(function(v1,v2){
return v1 - v2;
})
console.log(arr);
用 splice函數(shù)分別實現(xiàn) push徙歼、pop、shift鳖枕、unshift方法魄梯。
function push(arr, value){
arr.splice(arr.length, 0, value)
return arr.length
}
var arr = [3, 4, 5]
arr.push(10)
function pop(arr){
arr.splice(arr.length-1,1,0)
return arr.length;
}
arr.pop();
console.log(arr);
function unshift(arr,value){
arr.splice(0,0,value)
return arr.length
}
arr.unshift(1);
console.log(arr);
function shift(arr){
arr.splice(0,1,0)
return arr.length;
}
arr.shift();
console.log(arr);
ES5 數(shù)組拓展
- .indexOf(element) / .lastIndexOf(element):用于查找數(shù)組內指定元素位置,查找到第一個后返回其索引宾符,沒有查找到返回-1酿秸,indexOf從頭至尾搜索,lastIndexOf反向搜索魏烫。
- .forEach(element, index, array)
- .every(function(element, index, array)) / .some(function(element, index, array)):
這兩個函數(shù)類似于離散數(shù)學中的邏輯判定辣苏,回調函數(shù)返回一個布爾值:
every是所有函數(shù)的每個回調函數(shù)都返回true的時候才會返回true,當遇到false的時候終止執(zhí)行哄褒,返回false
some函數(shù)是“存在”有一個回調函數(shù)返回true的時候終止執(zhí)行并返回true稀蟋,否則返回false - .map(function(element)):與forEach類似,遍歷數(shù)組呐赡,回調函數(shù)返回值組成一個新數(shù)組返回退客,新數(shù)組索引結構和原數(shù)組一致,原數(shù)組不變
- .filter(function(element))
返回數(shù)組的一個子集链嘀,回調函數(shù)用于邏輯判斷是否返回萌狂,返回true則把當前元素加入到返回數(shù)組中,false則不加
新數(shù)組只包含返回true的值管闷,索引缺失的不包括,原數(shù)組保持不變 - .reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value):
遍歷數(shù)組窃肠,調用回調函數(shù)包个,將數(shù)組元素組合成一個值,reduce從索引最小值開始,reduceRight反向碧囊,方法有兩個參數(shù)
回調函數(shù):把兩個值合為一個树灶,返回結果
value,一個初始值,可選
var a = [1,2,3,4,5,6,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //7
a.forEach(function(e,i,arr){
arr[i]=e*e;
});
console.log(a);//[1, 4, 9, 16, 25, 36, 9, 4, 1]
console.log( a.every(function(e,i,arr){
return e > 5;
}));//false
console.log( a.some(function(e,i,arr){
return e > 5;
}));//true
console.log(a.map(function(e){
return e * e
}));//[1, 16, 81, 256, 625, 1296, 81, 16, 1]
console.log(a);//[1, 4, 9, 16, 25, 36, 9, 4, 1]
console.log(a.filter(function(e){
return e % 2 == 0;
}))//[4, 16, 36, 4]
console.log(a)// [1, 4, 9, 16, 25, 36, 9, 4, 1]
var b = a.reduce(function(v1, v2){
return v1 + v2 });
console.log(b);// 105
var c = a.reduceRight(function(v1, v2){
return v1 + v2 }, 10)
console.log(c);//115
范例:
寫一個函數(shù)糯而,操作數(shù)組天通,返回一個新數(shù)組,新數(shù)組中只包含正數(shù)熄驼。
function filterPositive(arr){
var arr1 = [];
for(var i = 0; i< arr.length; i++ ){
if(typeof arr[i] === "number" && arr[i] > 0){
arr1.push(arr[i])
}
}
return arr1;
}
var arr = [3, -1, 2, '饑人谷', true]
var arr = filterPositive(arr)
console.log(arr) // [3,2]
對以下代碼 users中的對象像寒,分別以 name 字段、age 字段瓜贾、company 字段進行排序
var users = [
{ name: "John", age: 20, company: "Baidu" },
{ name: "Pete", age: 18, company: "Alibaba" },
{ name: "Ann", age: 19, company: "Tecent" }
]
var sortByName = users.sort(function(v1,v2){
return v1.name > v2.name;
});
console.log(sortByName);
var sortByAge = users.sort(function(v1,v2){
return v1.age - v2.age;
});
console.log(sortByAge);
var sortByCompany = users.sort(function (v1,v2){
return v1.company > v2.company;
} );
console.log(sortByCompany);
實現(xiàn)一個reduce函數(shù)诺祸,作用和原生的reduce類似下面的例子。
var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); //6
function reduce(arr,iterate,initValue){
var tmpArr = (initValue === undefined ?[]:[initValue].concat(arr))
while(tmpArr.length>1){
tmpArr.splice(0,2,iterate(tmpArr[0],tmpArr[1]));
}
return tmpArr[0];
}
var sum = reduce([3,5,6],function(v1,v2){
return v1 + v2;
},10);
console.log(sum);//24
實現(xiàn)一個flatten函數(shù)祭芦,將一個嵌套多層的數(shù)組 array(數(shù)組) (嵌套可以是任何層數(shù))轉換為只有一層的數(shù)組筷笨,數(shù)組中元素僅基本類型的元素或數(shù)組,不存在循環(huán)引用的情況
function flatten(arr){
return arr.reduce(function(arr1,arr2){
return arr1.concat(Array.isArray(arr2)?flatten(arr2):arr2)
},[])
}
function flatten2(arr){
var newArr= [];
arr.forEach(function(e){
if(Array.isArray(e)){
newArr=newArr.concat(flatten2(e));
}else {
newArr.push(e);
}
})
return newArr;
}
var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]]
var arr1=flatten(arr);
console.log(arr1);//[3, 2, -4, 5, 7, -3, "aa", "bb"]
var arr2=flatten2(arr);
console.log(arr2);//[3, 2, -4, 5, 7, -3, "aa", "bb"]
作者:彭榮輝
鏈接:http://www.reibang.com/u/0f804364a8a8
來源:簡書
著作權歸作者所有龟劲。商業(yè)轉載請聯(lián)系作者獲得授權胃夏,非商業(yè)轉載請注明出處。