创建数组
- 构造函数
var a1 = new Array(5);
console.log(a1.length);//5
console.log(a1); //[] ,数组是空的
- 字面量
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函数分别实现 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 数组拓展
- .indexOf(element) / .lastIndexOf(element):用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。
- .forEach(element, index, array)
- .every(function(element, index, array)) / .some(function(element, index, array)):
这两个函数类似于离散数学中的逻辑判定,回调函数返回一个布尔值:
every是所有函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false
some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false - .map(function(element)):与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变
- .filter(function(element))
返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加
新数组只包含返回true的值,索引缺失的不包括,原数组保持不变 - .reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value):
遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数
回调函数:把两个值合为一个,返回结果
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
范例:
写一个函数,操作数组,返回一个新数组,新数组中只包含正数。
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);
实现一个reduce函数,作用和原生的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
实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况
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"]
作者:彭荣辉
链接:https://www.jianshu.com/u/0f804364a8a8
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。