美文网首页
js 中遍历对象的方法

js 中遍历对象的方法

作者: wakeGIS | 来源:发表于2016-12-22 10:50 被阅读0次

    包含原型链上的属性

    • for...in
    var o = {name:"www",age:1};
    o.__proto__.parent = "parent";
    for(var item in o){
        console.log(o[item]);
    }
    // www、1、parent
    

    不包含原型链上的属性

    • for...in
    var o = {name:"www",age:1};
    o.__proto__.parent = "parent";
    for(var item in o){
        if (o.hasOwnProperty(item)) {
            console.log(o[item]);
        }   
    }
    // www、1
    
    • for...of
      利用 for...of 循环, 可以写出遍历任意对象的方法。 原生的JavaScript对象没有遍历接口, 无法使用 for...of 循环.
      1. 通过Generator函数objectEntries为它加上这个接口, 就可以用了
    function* objectEntries(obj) {
          let propKeys = Reflect.ownKeys(obj);
          for (let propKey of propKeys) {
              yield [propKey, obj[propKey]];
          }
    } 
    let jane = { first: 'Jane', last: 'Doe' };
    for (let [key, value] of objectEntries(jane)) {
    console.log(`${key}: ${value}`);
    } 
    // first: Jane// last: Doe 
    
    1. 将Generator函数加到对象的 Symbol.iterator 属性上面。
    function* objectEntries() {
        let propKeys = Object.keys(this);
        for (let propKey of propKeys) {
            yield [propKey, this[propKey]];
        }
    } 
    let jane = { first: 'Jane', last: 'Doe' };
    jane[Symbol.iterator] = objectEntries;
     for (let [key, value] of jane) {
            console.log(`${key}: ${value}`);
    } 
    // first: Jane// last: Doe 
    
    • Object.keys
      Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in
      循环遍历该对象时返回的顺序一致 (顺序一致不包括数字属性)(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。
    var o = {name:'wuerchang',age:1};
    o.__proto__.parent = "parent";
    Object.keys(o).forEach(k => console.log(o[k]));
    // wuerchang、1
    

    相关文章

      网友评论

          本文标题:js 中遍历对象的方法

          本文链接:https://www.haomeiwen.com/subject/jlbcvttx.html