JS数组的原生方法:
arr.concat(arr1,arr2,arrn)
arr.join(‘,’)
arr.sort(func) //排序,默认是按照字典序排序
arr.pop();
arr.push(e1,e2,en)
arr.shift() //删除数组的第一个元素,并返回该元素
arr.unshift(e1,e2,en) //在数组的第一个位置添加元素,并返回添加新元素后的数组长度
arr.reverse()
arr.slice(start,end) //提取原数组的一部分a.slice()相当于复制数组
arr.splice(index,count,e1,e2,en)
Arr.indexOf(el) //返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1
Arr.lastIndexOf(el) //返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1
Arr.includes(el) //ES6
Arr.map(fn) //对数组所有成员一次调用一个函数,根据函数结果返回新数组
Arr.forEach() //遍历数组,执行某种操作,一般无返回值
Arr.filter(fn) //将返回结果为true的成员组成一个新数组返回。该方法不会改变原数组
Arr.some(fn) //只要一个成员返回true,整个方法返回true
Arr.every(fn) //所有成员的返回值都是true,才返回true,否则返回false
Arr.reduce() //从左到右处理
Arr.reduceRight() //从右到左
改变原数组的:
Shift:将第一个元素删除并返回删除元素,空即为undefined
Unshift:向数组开头添加元素,并返回新的长度
Pop:删除最后一个并返回删除的元素
Push:向数组末尾添加元素,并返回新的长度
Reverse:颠倒数组顺序
Sort:对数组排序
Splice:splice(start,length,item)删除,增加,替换数组元素,返回被删除数组,无删除则不返回
不改变原数组的:
Concat:连接多个数组,返回新的数组
Join:将数组中所有元素以参数作为分隔符放入一个字符
Slice:slice(start,end),返回选定元素
Map,filter,forEach,some,every等不改变原数组
- forEach遍历所有元素
- every判断所有元素是否都符合条件(返回true或false)
- some判断是否有至少一个元素符合条件
- sort排序
- map对元素重新组装,生成新数组
- filter过滤符合条件的元素
注:forEach与map用法相似都是遍历数组的每一项值;
区别:map的回调函数中支持return的返回值
1、forEach:
var arr = [1,3,5,2,3];
arr.forEach(function (item,index) {
console.log("索引:"+index,"元素:"+item);
})
输出: 索引:0 元素:1
索引:1 元素:3
索引:2 元素:5
索引:3 元素:2
索引:4 元素:3
2、every:碰到一个返回不符合条件的,就返回false
var arr = [1,3,5,2,3,4];
var result = arr.every(function (item,index) {
if(item<4){
return true;
}
})
console.log(result);
输出:false
3、some:碰到一个true的值就直接返回。
var arr = [1,3,5,2,3,4];
var result = arr.some(function (item,index) {
if(item<2){
return true;
}
})
console.log(result);
输出:true
4、sort:
var arr = [1,3,5,2,3,4];
var arr1 = arr.sort(function (a,b) {
return a-b; //从小到大排序
//return b-a; //从大到小排序
})
console.log(arr1);
输出:[1, 2, 3, 3, 4, 5]
5、map:将元素重新组装并返回
var arr = [1,3,5,2,3,4];
var arr2 = arr.map(function (item,index) {
return item*item;
})
console.log(arr2);
输出:[1, 9, 25, 4, 9, 16]
6、filter:通过某一条件过滤数组
var arr = [1,3,5,2,3,4];
var arr3 = arr.filter(function (item,index) {
if(item>2){
return true;
}
})
console.log(arr3);
输出:[3, 5, 3, 4]
对象的原生方法:
object.hasOwnProperty(prop) //判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性
object.propertyIsEnumerable(prop) //判断某个属性是否可枚举
Object.valueOf() //返回当前对象对应的值
Object.toString() //返回当前对象对应的字符串形式,用来判断一个值的类型
Object.toLocaleString() //返回当前对象对应的本地字符串形式
Class.prototype.isPropertyOf(object) //判断当前对象是否为另一个对象的原型
如:
var obj = {
x:100,
y:200,
z:300
}
var key;
for(key in obj){
if(obj.hasOwnProperty(key)){//hasOwnProperty是判断对象实例的是否具有某个属性
console.log(key,obj[key]);
}
}
输出:x 100
y 200
z 300
解题:
1、获取2018-03-21格式的日期
function formateDate(dt) {
if(!dt){
dt = new Date();
}
var year = dt.getFullYear();
var month = dt.getMonth()+1;
var date = dt.getDate();
if(month<10){
month = "0" + month; //强制类型转换
}
if(date<10){
date = "0" + date; //强制类型转换
}
return year + "-" + month + "-" + date;
}
var dt = new Date();
var date = formateDate(dt);
console.log(date);
2、获取随机数,要求是长度一致的字符串格式
var random = Math.random();
var random = random + '0000000000'; //末尾加0补位
var random = random.slice(0,10); //截取前10位
console.log(random);
3、写一个能遍历对象和数组的forEach函数
function forEach(obj,fn) {
var key;
if(obj instanceof Array){ //判断是数组
obj.forEach(function (item,index) {
fn(index,item);
})
}else{ //对象
for(key in obj){
fn(key,obj[key]);
}
}
}
//数组
var arrs = [1,2,3];
forEach(arrs,function (index,item) {
console.log(index,item);
})
//对象
var obj = {x:100,y:200};
forEach(obj,function (key,value) {
console.log(key,value);
})
输出: