常见遍历数组的方法

1.for循环

这是最基本的实现方式,改变原数组

var arr=[1,2,3]
for (var i=0;i<arr.length;i++){
console.log(arr[i])
}
export default {
  data() {
    return {
      arr: ["a", "b", "c", "d", "e"],
      arrS: [1, 2, 3, 4, 5, 6],
      arrB: [
        { aa: 1, bb: "b1" },
        { aa: 2, bb: "b2" },
        { aa: undefined, bb: "b3" },
        { aa: 4, bb: "b4" },
      ],
      userInfo: {
        name: "zhangsan",
        age: 20,
        gender: "male",
      },
    };
  },
  created() {
    this.szblForof();
  },
  methods: {
    szblfor() {
      for (var i = 0; i < this.arr.length; i++) {
        console.log("arr[i]", this.arr[i]);
      }
    },}

2.forEach()函数

        arr.forEach()方法允许为数组的每个元素都运行一个函数,forEach()函数接受一个回调函数,参数分别表示当前执行的元素的值,当前值的索引和数组本身。

var arr=[1,2,3,5,6,7]
    arr.forEach(function(item,index,array){
    console.log(index+":"+item)
    }
  )
 szblforEach() {
      this.arr.forEach((item, index, arr) => {
        console.log("item", item);
        // console.log('index',index)
        // console.log('arr',arr)
        if (index == 2) {
          console.log("22222", item);
          arr[index] = 22222;
        }
        console.log("arr输出值", this.arr);//["a", "b", 22222, "d", "e"]
      });
    },

3. map()函数

注意:在map()函数的回调函数中需要通过return将处理后的值进行返回,否则会返回undefined

var arr=[1,3,6,90,23]
    var result=arr.map(function(item,index,array){
    console.log(index)
    return item*item
 });
    console.log('result:========',result)
  szblmap() {
      const newmap = this.arrS.map((item, index, arr) => {
        console.log("index", index);
        // return {
        //   label:item,
        //   value:index,
        // }保存字典数据常用写法
        return item * item;
        if (index == 2) {
          return false;
        }
      });
      console.log("newmap", newmap);//[1, 4, 9, 16, 25, 36]
    },
//arrS: [1, 2, 3, 4, 5, 6]
const newmap=[];
this.arrS.some((item,index,arr)=>{
    newmap.push(item*item)
    if(index===2){
        return true;//终止some方法的执行
    }
  });
console.log('newmap',newmap)//[1,4,9]
//some()默认为false,当index为2时,some()方法会返回true,从而终止循环。
//同时可以在循环中使用newmap.push(item*item)来添加修改后的元素到newmap数组中。

 map和forEach的区别

1.map创建一个新数组,原数组不会发生改变。

2.map()里面可以用return, 而forEach()里面的return不起作用,不能用break,会直接报错。

3.forEach()返回值是undefined,不可以链式调用。

4.性能方面,for循环是在js的时候就有了,forEach()和map()是ES5提出的,map()还需要返回一个等长的数组,for()性能最好,其次是forEach(),然后是map()。

return

1.可以是函数有一个返回值

2.可以终止一个函数的执行,函数后面的代码就不会被调用

return和break

1.break主要是用于结束循环的

2.return是结束函数调用

例子:

//optionsCascader: [],
grammarTree() {
      grammarTreeAPI().then((res) => {
        console.log('res---', res)
        let options = [];
        res.data.forEach(item => {
          let option = {
            value: item.name,
            label: item.name,
            children: (item.childList && item.childList.length > 0) ?
              item.childList.map(childItem => ({
                value: childItem.name,
                label: childItem.name,
                children: (childItem.childList && childItem.childList.length > 0) ?
                  childItem.childList.map(subChildItem => ({
                    value: subChildItem.name,
                    label: subChildItem.name
                  })) : undefined
              })) : undefined
          };
          options.push(option);
        });
        this.optionsCascader = options;
        console.log('this.optionsCascader', this.optionsCascader)
      });
    },

 

变量名动态赋值

sz() {
  this.tabData.forEach((item, index) => {
    if (item.gkRvitemResultList) {
      const szArr = item.gkRvitemResultList.map((item, index) => {
        return {
          value: item.itemresult,
          label: item.itemresult,
        };
      });

      // 创建动态变量名
      const variableName = `valueList${index + 3}`;

      // 将 szArr 赋值给动态变量名
      this[variableName] = szArr;

      console.log(`szArr${index + 1}`, szArr); // 打印 szArr
    }
  });
}

4.some()函数和every()函数

相似处:对数组遍历,主判断是否有满足条件的元素,有就返true,无返false。

区别:1. some()某一元素满足返回true,不会对后面的元素进行判断。

           2. every()数组中每个元素都满足才返回true。

function fn(item,index,array){
    return item>6
  }
var result =[1,2,3,4,5,6].some(fn)//false
console.log(result)
function fn(item,index,array){
    return item>6
  }
var result =[1,2,3,4,5,6,7].every(fn)
console.log(result)//false
//arrS: [1, 2, 3, 4, 5, 6] 用法同forEach()
getSome(){
   const resultSome=this.arrs.some((item)=>{
       return item>5
    })
   console.log('resultSome',resultSome)//true
}
getEvery(){
   const resultEvery=this.arrs.every((item)=>{
       return item>5
    })
   console.log('resultEvery',resultEvery)//false
}

5.find()函数

        find()函数用于数组的遍历,当找到第一个满足条件的元素的值时====>返回该元素值

找不到满足条件的,则返回undefined。方法同forEach()

var arr=[1,3,6,90,23]
const result = arr.find(function(item,index,array){
    return item>6
});
console.log(result)//90

6.filter()函数

        filter()方法可过滤也可遍历数组,用法同forEach()。

var fn=function(x){
    return x%2!==0
}
var arr=[1,2,5,6,78,9,10]
var result=arr.filter(fn)
console.log(result)//[1,5,9]

//vue中
 doubleValue(x) {
      return x % 2 !== 0;
    },

 szblFilter1() {
    var resultF=this.arrS.filter(this.doubleValue)
    console.log('resultF', resultF);
  },

 szblFilter2() {
      var resultF = this.arrS.filter((item, index) => {
        return item % 2 !== 0;
      });
      console.log("resultF", resultF);
    },

7.reduce()函数

 // arrS: [1, 2, 3, 4, 5, 6],
 // arrB: [
 //   { aa: 1, bb: "b1" },
 //   { aa: 2, bb: "b2" },
 //   { aa: undefined, bb: "b3" },
 //   { aa: 4, bb: "b4" },
 // ],
 szblReduce1() {
      const findR = this.arrB.reduce((a, b) => {
        return a.aa + b.aa;
      }, 0);
      console.log("findR", findR);//NaN  若 { aa: 3, bb: "b3" },返回也是NaN
    },
 //改成
 szblReduce2() {
      const findR = this.arrB.reduce((a, b) => {
        return a + b.aa;
      }, 0);
      console.log("findR", findR);///NaN  若 { aa: 3, bb: "b3" },返回10
    },

8.for in && for of(不推荐)

首先两者都可用于遍历

区别:

1.for in 适合遍历对象(通常用for in 来遍历对象的键名), for of用于遍历数组

const arr=[1,2,3,4,5]
for (let value of arr){
   console.log(value)
}
//1
//2
//3
//4
//5
//或者
 szblForof() {
      for (let value of this.arrB) {
        console.log("value", value);
      }
    },
//遍历对象 通常用for in来遍历对象的键名
const userInfo={
   name:'zhangsan',
   age:20,
   gender:'male'
}
for (let item in userInfo){
   console.log(item) //对象的key:name age gender
   console.log(userInfo[item]) //对象的value:zhangsan 20 male
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值