blog
blog copied to clipboard
数组遍历
- 遍历数组
-
for
最古老的循环,效率高。处理大量循环的时 -
for-of
只遍历对象上的,ES6 -
forEach
数组内部的方法。稀疏数组 -
for-in
会遍历继承链的对象属性。遍历对象的属性,仅可枚举类型
-
- 其它
-
map
产生新数组。数组的每项经过计算,产生的新值 -
filter
产生新数组。返回 true 的值 -
reduce
返回值。前项加后项,累计计算最终值 -
every
布尔值。遇到返回 false 的,就返回 false。 检测每一项是否符合条件 -
some
布尔值。遇到返回 true 的,就返回 true。 检查是否有符合条件的项
-
for > for-of > forEach > filter > map > for-in every > some
const arr = [1,2,3,4,5];
// const arr = [{'name': 'anjia', 'score': { 'math':90, 'eng':100}}, 5, 'test'];
function log(msg, prefix){
prefix ? console.log('\n' + msg) : console.log(msg);
}
log('for', true);
for(let i=0, len=arr.length; i<len; i++){
log(arr[i]);
}
log('for-of', true);
for(let item of arr){
log(item);
}
log('forEach', true);
arr.forEach(item => {
log(item);
});
log('for-in', true);
for(i in arr){ // 下标
log(arr[i]);
}
function log(msg, prefix){
prefix ? console.log('\n'+msg) : console.log(msg);
}
log('map', true);
var arr = [1,2,3,4,5];
var newArr = arr.map(item => {
log(item);
return item*2;
});
log(newArr);
log('filter', true);
var arr = [1,2,3,4,5,6];
let greater = arr.filter(item =>{
log(item);
return item > 3;
});
log(arr);
log(greater);
log('reduce', true);
let scores = [10, 20, 30];
let total = scores.reduce((sum, item)=>{
console.log('sum=', sum, ' item=', item);
return sum + item;
}, 0);
log(total);
e.g.
const members = ['anjia', 'luoqiang', 'lijianchun'];
// 移除'anjia'
const withoutAnjia = members.filter(item => item!=='anjia');
console.log(withoutAnjia === members); // false
console.log(withoutAnjia, members);
// 把'anjia'替换成'zora'
const replaceAnjia = members.map(item => item==='anjia'?'zora':item);
console.log(replaceAnjia === members); // false
console.log(replaceAnjia, members);
// 把所有人名大写
const strongMembers = members.map(item => item.toUpperCase());
console.log(strongMembers === members); // false
console.log(strongMembers, members);
// 和另外一组进行合并
const otherMembers = ['peipei', 'yingying'];
const newMembers = [...members, ...otherMembers];
console.log(newMembers === members, newMembers === otherMembers); // false, false
console.log(newMembers, members);
- 创建了新对象,和原数组不是“对象引用”
- 写法更简洁,都是 immutable