首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Object.fromEntries

Object.fromEntries

作者头像
阿超
发布2022-08-21 12:58:44
发布2022-08-21 12:58:44
3020
举报
文章被收录于专栏:快乐阿超快乐阿超

文档

我们可以用其将Iterator转换为对象,例如Map、Array或者实现@@iterator方法的的对象

代码语言:javascript
复制
Object.fromEntries(new URLSearchParams("q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4"))
代码语言:javascript
复制
Object.fromEntries(new Map(new URLSearchParams("q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4")))

例如我这里写一个class,实现迭代协议

代码语言:javascript
复制
class Ruben {
  constructor(data) {
    this.data = data
    this.dataArray = Object.entries(data)
  }

  [Symbol.iterator]() {
    // Use a new index for each iterator. This makes multiple
    // iterations over the iterable safe for non-trivial cases,
    // such as use of break or nested looping over the same iterable.
    let index = 0;

    return {
      next: () => {
        if (index < this.dataArray.length) {
          return {value: this.dataArray[index++], done: false}
        } else {
          return {done: true}
        }
      }
    }
  }
}

然后我们就可以把其作为一个迭代器使用,例如散列运算符

代码语言:javascript
复制
[...new Ruben({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
})]

或者我们提到的Object.fromEntries

代码语言:javascript
复制
Object.fromEntries(new Ruben({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
}))

当然还是返回一个对象

甚至for..of

代码语言:javascript
复制
for (let i of  new Ruben({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
}))console.log(i)

我们再写一个无穷迭代器且实现了迭代协议让其变为一个可迭代对象

代码语言:javascript
复制
class SimpleClass {
  constructor(data) {
    this.data = data
  }

  [Symbol.iterator]() {
    let index = 0;
    return {
      next: () => {
        return {value: index++}
      }
    }
  }
}

然后我们使用该方法,会造成死循环,因为永远不会结束迭代

代码语言:javascript
复制
[...new SimpleClass()]

另一种写法是function形式

代码语言:javascript
复制
function idMaker() {
    let index = 0;
    return {
       next: function() {
           return {
               value: index++,
               done: false
           };
       }
    };
}

使用起来差不多:

代码语言:javascript
复制
let it = idMaker();

console.log(it.next().value); // '0'
console.log(it.next().value); // '1'
console.log(it.next().value); // '2'

fromEntries是将迭代器转为对象,也可以用Object.entries将对象转换为数组

代码语言:javascript
复制
Object.entries({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
})

得到

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档