js所有循环数组的方式

1.普通for循环

let arr = [5,47,7,21,83,8,11,9,26,1];
for(let i=0;i<arr.length;i++){
     let item = arr[i];
     console.log(item)
}

2.for of 循环

let arr = [5,47,7,21,83,8,11,9,26,1];
for(let item of arr){
   // item是遍历项目
   console.log(item);
}

3. forEach 方法

参数:

  • item 遍历项内容
  • index 遍历项索引值
    注意事项:
  • forEach 里不能使用break和continue,可以试用return,但是return类似continue,并不能中断循环
  • forEach 属于异步,即使使用了await 也不会变成同步
//模拟异步请求接口
function fakeRequest(n) {
  return new Promise((resolve, reject) => {
    let arr = ["荔枝", "苹果", "猕猴桃", "芒果", "西瓜", "水蜜桃",'樱桃','车厘子','西红柿','黄高','豆角','草莓','葡萄'];
    setTimeout(() => {
        let result = [];
        for(let i=0;i<n;i++){
            let item = arr[Math.floor(Math.random() * arr.length)];
            result.push({
                key: n+i, label: item
            })
        }
      resolve(result) ;
    }, 200);
  });
}
//模拟请求接口 
function getData(){
    let arr = [1,2,3,4] 
    let result = [];
    arr.forEach(async n=>{
    let temp = await fakeRequest(n);
        console.log(temp)//最后才打印这个
        result.push(temp)
    })
    console.log(result)//后打印这个
    return result;
}
console.log(getData())//先打印这个

4.every 方法

every用于检测数组所有元素是否都符合指定条件

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。
  • 参数:
    • item 遍历项内容
    • index 遍历项索引值
    • arr 原数组
//可用于验证输入框必选项都有值的情况下,提交按钮才可用,否则就禁用 案例
let obj = {
    name:'1',
    age:'',
    code:'',
    phone:'',
}
//判断obj对象中每一项都有值 
let result = Object.values(obj).every(item=>{
    return item;
})
console.log(result)

5.some 方法

some用于检测数组是否有元素符合指定条件

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。
  • 参数
    • item 遍历项内容
    • index 遍历项索引值
    • arr 原数组
let arr = [5,47,7,21,83,8,11,9,26,1];
let re =  arr.some((item,index,arr)=>{
     return item>10;
 })
console.log(re); //true

6.filter 方法

  • iem 循环的改项
  • index 索引值
  • selftArr 数组本身
    filter将符合条件的所有元素组成一个新数组返回
  • 不会对空数组进行检测
  • 不会改变原始数组
//数组去重
let temp = ['g','a','b','m','c','e','a','d','f','g','c','m','d'];
let filterArr = temp.filter((item,index,selftArr)=>{
   return selftArr.indexOf(item) === index;
})
console.log(filterArr)

7.map 方法

map 对数组每一项进行处理,并且返回处理之后的数据组成的数组

  • 按照原始数组元素顺序依次处理元素
  • 不会对空数组进行检测
  • 不会改变原始数组
  • 参数
    • item 遍历项内容
    • index 遍历项索引值
    • arr 原数组
//模拟异步请求接口
function fakeRequest(n) {
  return new Promise((resolve, reject) => {
    let arr = ["荔枝", "苹果", "猕猴桃", "芒果", "西瓜", "水蜜桃",'樱桃','车厘子','西红柿','黄高','豆角','草莓','葡萄'];
    setTimeout(() => {
        let result = [];
        for(let i=0;i<n;i++){
            let item = arr[Math.floor(Math.random() * arr.length)];
            result.push({
                key: n+i, label: item
            })
        }
      resolve(result) ;
    }, 200);
  });
}
//模拟请求接口
function getData(){
    let arr = [1,2,3,4]
    return arr.map(async n=>{
       return  await fakeRequest(n);
    })
}
//为了获取一个数组 使用all 
Promise.all(getData()).then(res=>{
    console.log(res)
})

8.reduce 多用于数学运算

第二个参数是初始值,类似于我们计算和的时候 初始化 let sum = 0,计算积的时候 初始化 let result = 1

  • prevResult 上一轮的计算结果,如果没有初始化值,默认数组的第一项
  • currentItem 循环的改项
  • index 索引值
  • selftArr 数组本身
let arr = [1,2,3,4];
//计算和
arr.reduce((prevResult,currentItem,index,selfArr)=>{
    return prevResult + currentItem;
},0)
//计算积
arr.reduce((prevResult,currentItem,index,selfArr)=>{
    return prevResult * currentItem;
},1)
//计算最大值
 arr.reduce((prevResult,currentItem,index,selfArr)=>{
    return Math.max(prevResult,currentItem);
},0)

综合小案例

全选
// html
 <div class="box">
    <input type="checkbox" v-model="isAll" @change="toggleAll"/>
     <ul>
        <li v-for="item in arr" :key="item.key">
            <input type="checkbox" v-model="item.checked" @change="handleChange(item)"/>
            <span>{{item.label}}</span>
            <span>{{item.price}}</span>
        </li>
  </ul>
  <div>总价:{{total}}</div>
 </div>
//js
import {ref,reactive,computed} from 'vue'
let isAll = ref(false);
let total = ref(0);
let arr = ref([
    {key:1,label:'苹果',checked:false,price:3100},
    {key:2,label:'vivo',checked:true,price:2100},
    {key:3,label:'oppo',checked:false,price:2899},
    {key:4,label:'华为',checked:false,price:3770},
    {key:5,label:'三星',checked:true,price:7830},
    {key:6,label:'诺基亚',checked:false,price:230},
    {key:7,label:'摩托罗拉',checked:false,price:150},
    {key:8,label:'小米',checked:false,price:4380},
    {key:9,label:'一加',checked:false,price:3907},
])
getSum();
//切换某一项
function handleChange(item){
    let checkedArr = arr.value.map(item=>item.checked);
    isAll.value = checkedArr.every(item=>item);
    getSum();
}
//切换全选
function toggleAll(){
    arr.value.forEach(e => {
        e.checked=isAll.value;
    });
    getSum();
}
//算总价
function getSum(){
     total.value = arr.value.reduce((prevResult,currentItem)=>{
        let value = currentItem.checked ? currentItem.price : 0;
        return prevResult + value;
    },0)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容