ES2015 (ES6) 新增的方法

    1. const arr = [1, 2, 3, 4 ,5];
    2. const it = arr.entries();
    3. console.log(it);
    4. // Array Iterator {} -> next() -> { value: [index, item], done: ? }

    返回数组的迭代器对象,其迭代对象的value用数组以[index, item]的结构展现。

    1. var o = {
    2. a: 1,
    3. b: 2,
    4. c: 3
    5. }
    6. for (let k in o){
    7. console.log(k, o[k]);
    8. }
    9. //--------------------------
    10. const arr = [1, 2, 3, 4 ,5];
    11. for (let v of arr){
    12. console.log(v); // 无法显示出其下标
    13. }
    14. const it = arr.entries();
    15. for (let c of it){
    16. const [i, v] = c;
    17. console.log(i, v); // [index, item]
    18. }

    数组实际上就是一个特殊的对象, key键名是一个从0开始有序递增的数字,按顺序对应上数组的每一个元素。所以才有类数组(对象模拟一个数组)

    var o = {
        0: 1,
      1: 2,
      2: 3,
      length: 3
    }
    
    for (let v of 0){
        console.log(v); // 报错 o is not iterable
    }
    

    为对象增加一个Symbol.iterator

    var o = {
        0: 1,
      1: 2,
      2: 3,
      length: 3,
      [Symbol.iterator]: Array.prototype[Symbol.iterator]
    }
    
    for (let v of 0){
        console.log(v); 
    }
    // 1 
    // 2
    // 3
    
    //-------------
    // 或者
    Object.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
    // 也可以
    Array.from(0);
    

    总结出 for … of 遍历可迭代对象(实现了 Symbol.iterator)

    对于迭代器每次都要使用next的真正使用方式,通过next把其结果放入到一个数组中去

    const arr = [1, 2, 3, 4 ,5],
             newArr = [],
          it = arr.entries();
    
    for (var i = 0; i < arr.length + 1; i++) {
        var item = it.next();
    
      !item.done && (newArr[i] = item.value);
    }
    

    利用entries对多维数组排序

    const newArr= [
        [56, 23],
      [56, 34, 100, 1],
      [123, 234, 12]
    ]
    
    function sortArr (arr) {
        var _it = arr.entries(),
          _doNext = true; // 是否进入下一次循环
    
      while(_doNext){
          var _r = _it.next();
    
        if(!_r.done) {
            _r.value[1].sort((a, b) => a - b); // 由小到大排序
          _doNext = true;
        } else {
            _doNext = false;
        }
      }
    
      return arr;
    }
    
    console.log(sortArr(newArr));