Object.fromEntries

简介: Object.fromEntries

微微怪时间不能保存情绪,保存那一切情绪所曾流连的境界。——《你是人间的四月天》

文档

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

Object.fromEntries(new URLSearchParams("q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4"))

Object.fromEntries(new Map(new URLSearchParams("q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4")))

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

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}
        }
      }
    }
  }
}

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

[...new Ruben({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
})]

或者我们提到的Object.fromEntries

Object.fromEntries(new Ruben({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
}))

当然还是返回一个对象

甚至for..of

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

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

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

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

[...new SimpleClass()]

另一种写法是function形式

function idMaker() {
    let index = 0;
    return {
       next: function() {
           return {
               value: index++,
               done: false
           };
       }
    };
}

使用起来差不多:

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

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

Object.entries({
    "q": "apple",
    "from": "en",
    "to": "zh",
    "appid": "2015063000000001",
    "salt": "1435660288",
    "sign": "f89f9594663708c1605f3d736d01d2d4"
})

得到

相关文章
|
4月前
|
JavaScript 前端开发
为什么typeof null 是object
为什么typeof null 是object
|
2月前
|
JSON 前端开发 JavaScript
成功解决:[object Object]
这篇文章讨论了在JavaScript中打印对象时出现的"[object Object]"问题的原因,并提供了使用`JSON.stringify()`方法将对象转换为字符串以便于打印和调试的解决方案。
成功解决:[object Object]
|
5月前
object
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法 public boolean equals(0bjectobj):参数可以是任何对象,只有参数是一个字符串并且内 容相同的才会给true;否则返回false 注意事项: 1.任何对象都能用object进行接收。 2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。 3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 推荐:"abc".equals(str) 不推荐:str.equals("abc") public boolean egualsIgnoreCas
30 2
|
4月前
|
Java
Object当中的object类型
Object当中的object类型
|
12月前
|
前端开发 索引
Object中常用的方法
Object中常用的方法
33 0
|
文字识别 API
The value is not an object
The value is not an object
142 1
|
Java
Object
Object
63 0
Object.fromEntries()
Object.fromEntries()
136 0