javascript - 如何使用迭代器和生成器来执行以下操作?
问题描述
我想获取data.json文件,解析成一个对象,并使其成为可迭代对象。(不要将对象数据类型更改为数组)使其成为可迭代使用
- 迭代器 2. 生成器 当该对象在 FOR OF 循环中传递时,我应该得到每个项目的输出,如下所示。Post Id: 1 Title: Some title Post Id: 2 Title: Some other title 等等……这是json文件的链接[https://raw.githubusercontent.com/attainu/curriculum-master-fullstack/master/编码挑战/深潜/迭代器-data.json?token=AOGF265VMPYWFKXO6RNGXPS67WAMM][1]
console.log("connected");
function fetchJSONFile(path, callback) {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
var data = JSON.parse(httpRequest.responseText);
if (callback) callback(data);
}
}
};
httpRequest.open('GET', path);
httpRequest.send();
}
fetchJSONFile(`https://raw.githubusercontent.com/attainu/curriculum-master-fullstack/master/coding-challenges/deep-dive/iterators-data.json?token=AOGF265VMPYWFKXO6RNGXPS67WAMM`, function(data)
{
data[Symbol.iterator] = function()
{
var c=0;
return {
// I Don't know how to access the key of the object inside the object , Can you help me please??
next() {
c++;
if (c <= data.length) {
return { done: false, value: "value" };
} else {
return { done: true };
}
}
}};
for (let val of data) {
console.log(val);
}
});
解决方案
我已经用 fetch 试过了。您可以进行更改。没挖。想出了这个。您将必须定义自己的iterator
. 这是你想要的吗?
const fetch = require('node-fetch');
const arr = [];
let status;
fetch('https://raw.githubusercontent.com/attainu/curriculum-master-fullstack/master/coding-challenges/deep-dive/iterators-data.json?token=AOGF265VMPYWFKXO6RNGXPS67WAMM') // Call the fetch function passing the url of the API as a parameter
.then((res) => {
status = res.status;
return res.json()
})
.then((jsonData) => {
jsonData[Symbol.iterator] = function () {
var self = this;
var values = Object.keys(this);
var i = 0;
return {
next: function () {
return {
value: self[values[i++]],
done: i > values.length
}
}
}
}
//you we can iterate over object
for (var p of jsonData) {
const obj = {
"PostID": p.id,
"Title": p.title
}
arr.push(obj)
}
console.log(arr)
})
.catch((err) => {
// handle error for example
console.error(err);
});
推荐阅读
- java - 如何在 Java 中使用自定义对象打印 PriorityQueue
- javascript - 离子输入中的自动完成
- python-3.x - 使用 Graph-tool 读取 Pajek .net 文件
- javascript - 如何根据 cy.route 观察到的 API 响应中的特定值创建赛普拉斯别名?
- javascript - 如何将参数作为字符串连接,中间有空格?
- jenkins - Jenkinsfile 步骤检查目录中的文件是否更改?
- java - java 8中的分组,其值为自定义地图
- python - 一次运行所有项目测试,但也能够单独运行它们(同时必须提供输入数据路径)
- linux - 它没有打开外壳,而是结束了
- angular - Angular等待多个异步发布请求,然后调用另一个端点