for、forEach、map都是用来循环的,性能依次递增。
后二只能循环数组,性能比for好很多,但缺点是不能及时跳出循环,必须循环全部结束才算完。
最基础的for:
let arr = [];
for (let i = 0; i < 10; i++) {
arr[i] = i;
}
console.log(arr);//[0,1,2,3,...,9]
forEach、map都有三个项目可用:item(数组索引项)、index(数组下标)、array(原始数组)
forEach()返回值是undefined,不可以链式调用。
map()有返回值,返回一个新数组,原数组不会改变,它不会对空数组进行检测。
这里有一数组:
tableData: [{
cno: '12306',
cname: '面向对象程序设计',
ctype:0,
cstatus:1,
}, {
cno: '12138',
cname: '数据结构与算法',
ctype:1,
cstatus:3
}, {
cno: '12580',
cname: '富客户端开发',
ctype:2,
cstatus:3
}],
我想要将cname下的所有项组成新数组:
var arr=this.tableData.map((val,index)=>{
console.log(val);
return val.cname; //不写return默认返回的是val一整项
})
console.log(arr); //面向对象程序设计,数据结构与算法,富客户端开发
同样的方在forEach身上并不适用:
var arr2=this.tableData.forEach(val=>{
console.log(val);
return val.cname; //forEach没有返回值
})
console.log(arr2) //undefined
于是forEach更常用于这样:
var items = [...];
items.forEach((item, i) => {
if (item.status == 'new')
this.apply(item, i)
});