• js常见类型变量的遍历


    各种数据结构的遍历
    1. for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环。
    对于for...of的循环,可以由 break, throw 或 return 终止。在这些情况下,迭代器关闭。
    2. for...in语句以任意顺序迭代一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。可以由 break, throw 或 return 终止。在这些情况下,迭代器关闭。
    3. for,可以由 break, throw 或 return 终止。在这些情况下,迭代器关闭。
    4. array/set/map的forEach,对数组的每个元素执行一次给定的函数,不会改变原数组,返回值 undefined,不能break/return

    1.string 的遍历

    function strIterator() {
        let str = 'hello offer!';
        for (const element of str) {
            console.log(element);
        }
    
        for (const ele in str) {
            console.log(ele); // 0-11
        }
    
    
        for (let i = 0; i < str.length; i++) {
            console.log(i, str[i]);
        }
    
    }

    2.array 的遍历

    若你需要提前终止循环,你可以使用:

    • 一个简单的 for 循环
    • for...of / for...in 循环
    • Array.prototype.every()
    • Array.prototype.some()
    • Array.prototype.find()
    • Array.prototype.findIndex()

    其他遍历方式:

    • map
    • reduce
    • reduceRight
    • reduceLeft
    • filter
    • every
    • some
    • sort
    • indexOf
    • findIndex
    • find
    function arrIterator(){
        let arr = ['hello', 'offer', 'world'];
    
        for (const element of arr) {
            console.log(element); // 'hello', 'offer', 'world'
        }
    
        for (const ele in arr) {
            console.log(ele);// 0 1 2
        }
    
        for (let i = 0; i < arr.length; i++) {
            console.log(i, arr[i]);
        }
    }

    3. object 的遍历

    function objIterator() {
        let obj = {
            name: 'hello',
            age: '12',
        }
    
        // 不可以直接 for of,Error: obj is not iterable
    
    
        for (const [key, value] of Object.entries(obj)) {
            console.log(`${key}: ${value}`);
        }
        for (const [key, value] of Object.keys(obj)) {
            console.log(`${key}: ${value}`);
        }
        for (const [key, value] of Object.values(obj)) {
            console.log(`${key}: ${value}`);
        }
        const names = Object.getOwnPropertyNames(obj); // ['name', 'age']
        for(let index = 0; index < names.length; index++){
            let key =  names[index];
            let value = obj[key];
            console.log('key : ' + key + ' , value : ' + value); //key : name , value : hello;  key : age , value : 12
    
        }
        let keys = Reflect.ownKeys(obj);
        for(let index = 0; index < keys.length; index++){
            let key =  keys[index];
            let value = obj[key];
            typeof key === 'symbol' ? key = Symbol.prototype.toString.call(key) : '';
            console.log('key : ' + key + ' , value : ' + value);
        }
    
        for (const ele in obj) {
            console.log(ele); // name age
        }
    
        // 不可以for,没有length
    }

    所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

    Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

    4.map 遍历

    function mapIterator(){
        let map = new Map([["a", 1], ["b", 2], ["c", 3]]);
    
        for (let [key, value] of map) {
            console.log(value);
        }
    
        // for-in 迭代值为空
    
        map.forEach((value, key) => console.log(value, key));
        // > 1 "a"
        // > 2 "b"
        // > 3 "c"
    
    }

    5.set 遍历

    function setIterator(){
        let set = new Set([1, 1, 2, 2, 3, 3]);
    
        for (let value of set) {
            console.log(value);
        }
    
        // for-in 迭代值为空
    
        set.forEach((value, key) => console.log(value, key));
        // > 1 1
        // > 2 2
        // > 3 3
    }
  • 相关阅读:
    CSU1018: Avatar
    ZOJ
    HDU—4463 Outlets 最小生成树
    查询文件中值所在的路径
    mysql语句查询时间检测
    phpmyadmin修改root密码
    检测Linux glibc幽灵漏洞和修补漏洞
    监控宝安装手册
    ubuntu安装环境软件全文档
    ubuntu mysql主从库的搭建
  • 原文地址:https://www.cnblogs.com/catherinezyr/p/16249312.html
Copyright © 2020-2023  润新知