Javascript-在node.js中为数组创建自定义迭代器有什么意义吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-在node.js中为数组创建自定义迭代器有什么意义吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2324字,纯文字阅读大概需要4分钟。
内容图文
![Javascript-在node.js中为数组创建自定义迭代器有什么意义吗?](/upload/InfoBanner/zyjiaocheng/668/35d5633ba5fe4260a32bd05cc6fa54dc.jpg)
我需要解析一个80GB的CSV文件,并认为这是理解JavaScript中的迭代器的好机会(然后可能使用现有的库,例如csv-iterator、fast-csv等).
查看MDN HERE上的迭代器示例,我看到以下代码:
function makeIterator(array) {
var nextIndex = 0;
return {
next: function() {
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{done: true};
}
};
}
这是不言自明的.我可以为数组创建迭代器:
var iteratorForMyArray = makeIterator([1,2,3,4,5,6,7,8,9, etc])
然后,我可以使用闪亮的新迭代器“迭代地”提取数组的值:
var val0 = iteratorForMyArray.next().value
var val1 = iteratorForMyArray.next().value
etc
我可以看到为什么在解析CSV文件时这很有用.我想知道为简单数组创建这样的迭代器是否有意义?
我经常发现,虽然简化的示例有助于理解,但有时很难看出该示例何时仅作为示例使用而在编程中却真正有用.
因为JavaScript已经提供了两种在数组结构上创建迭代器的机制:
1:基本的for循环
for (let i = 0, i < [1,2,3,4,etc]; i++) {
...
}
2:Array.prototype.forEach
[1,2,3,4,etc].forEach(function(val, i, arr) {
...
})
(我刚才看到的在this网站上运行缓慢)
问题:
>我的自定义迭代器是否提供了这些迭代器没有的功能?
>这两个“内部”迭代器是否都创建了“迭代器”(即我所理解的指向数据结构中值的顺序指针)?还是我离英里远…
解决方法:
迭代器的一个好功能是,每次调用都获得下一个元素,而forEach则全部或全部(您不能提早退出),并且对于for循环和forEach而言,所有逻辑都必须在循环内.
考虑如下数组迭代器:
function arrayIterator(array) {
// Get array indexes as an array
var indexes = Object.keys(array)
.filter(
// Test for valid Array index property
key => key == +key && key >= 0 && key.length == String(+key).length)
// Sort as numbers
.sort(function(a, b){return a-b});
// Parameters held in closure
var current = 0;
var count = 0;
var maxCount = indexes.length;
// Return iterator function
return function() {
return ++count > maxCount? 'done' : array[indexes[current++]];
};
}
var arr = [0,1,,,4,5,6];
// Add non-index numeric property
arr['01'] = '01';
// Add indexable numeric property
arr['10'] = '10';
// Add some other property
arr.foo = 'foo';
var x = arrayIterator(arr);
console.log(x()); // 0
console.log(x()); // 1
console.log(x()); // 4
console.log(x()); // 5
console.log(x()); // 6
console.log(x()); // 10
console.log(x()); // 'done'
console.log(x()); // 'done'
我确定在检查有效索引以及测试调用迭代器时是否仍然存在索引方面,还有更多工作要做,但这表明了这一概念.
还需要一些文档,说明在两次调用之间修改数组时会发生什么.
内容总结
以上是互联网集市为您收集整理的Javascript-在node.js中为数组创建自定义迭代器有什么意义吗?全部内容,希望文章能够帮你解决Javascript-在node.js中为数组创建自定义迭代器有什么意义吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。