blog icon indicating copy to clipboard operation
blog copied to clipboard

数组遍历

Open anjia opened this issue 6 years ago • 1 comments

  • 遍历数组
    • 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);

anjia avatar Sep 14 '18 02:09 anjia

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

anjia avatar Sep 28 '18 03:09 anjia