侧边栏壁纸
博主头像
woku博主等级

成功的路上并不拥挤

  • 累计撰写 50 篇文章
  • 累计创建 13 个标签
  • 累计收到 3 条评论

entries

woku
2021-11-16 / 0 评论 / 0 点赞 / 61 阅读 / 1,645 字

Array.prototype上的一个内置方法 ES2015 ES6版本

先来看调用它得到什么?

var arr = [1,2,3,4]
var _ = arr.entries()
console.log(_)

由此可知,数组调用entries后产出了一个迭代器对象

迭代器对象里面会有一个next方法

var arr = [1,2,3,4]
var _ = arr.entries()
console.log(_)
console.log(_.next())
console.log(_.next())
console.log(_.next())
console.log(_.next())
console.log(_.next())

迭代器对象调用next方法,返回一个由value和done组成的对象,只是不同的是value是个数组,展开这个数组,里面的元素分别是[index,item] index - 索引 item - 具体的值

entries 返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

在遍历数组的时候,使用for of对Iterator对象进行遍历,可以拿到index和value

而且还可以使用break使得遍历终止。

        var arr = [1,2,3,4]
        var _ = arr.entries()
        for(var i of _) {
            var [index,item] = i
            if(index === 2) {
                break
            }
            console.log(index,item)
        }
        // 0 1
        // 1 2

数组实际上是一个特殊的对象,key键名是一个从0开始有序递增的数字

那么使用for--of能遍历对象吗?

        var obj = {
            0: 1,
            1: 2,
            2: 3,
            length: 3
        }
        for (var i of obj) {
            console.log(i)
        }

发现会报错:

报错信息:obj is not iterable

obj不是一个可迭代对象

怎样将obj变成一个可迭代对象(将obj对象变为可迭代对象才能使用for of进行循环)

  •         var obj = {
                0: 1,
                1: 2,
                2: 3,
                length: 3,
                [Symbol.iterator]: Array.prototype[Symbol.iterator] 
            }
            for (var i of obj) {
                console.log(i)
            }
    
  •         Object.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator]
            var obj = {
                0: 1,
                1: 2,
                2: 3,
                length: 3,
            }
            for (var i of obj) {
                console.log(i)
            }
    
  •         Object.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator]
            var obj = {
                0: 1,
                1: 2,
                2: 3,
                length: 3,
            }
            for (var i of obj) {
                console.log(i)
            }
    

使用entries对二维数组进行排序

普通方法:

        var myArray = [
            [1, 3, 4, 4],
            [2, 3, 5, 2],
            [1, 2, 3, 4]
        ]

        function sortArr(arr) {
            for (var i = 0; i < arr.length; i++) {
                if (Array.isArray(arr[i]))
                    arr[i] = arr[i].sort(function(a, b) {
                        return a - b
                    })
            }
            return arr
        }

使用entries

        var myArray = [
            [1, 3, 4, 4],
            [2, 3, 5, 2],
            [1, 2, 3, 4]
        ]

        function sortArr(arr) {
            var goNext = true,
                entries = arr.entries()
            while (goNext) {
                var result = entries.next()
                if (!result.done) {
                    result.value[1].sort(function(a, b) {
                        return a - b
                    })
                    goNext = true
                } else {
                    goNext = false
                }
            }
            return arr
        }
        console.log(sortArr(myArray))
0

评论区