1.0.2 • Published 2 years ago

iterate-iterator v1.0.2

Weekly downloads
2,230,512
License
MIT
Repository
github
Last release
2 years ago

iterate-iterator Version Badge

github actions coverage dependency status dev dependency status License Downloads

npm badge

Iterate any iterable JS iterator. Works robustly in all environments, all versions.

In modern engines, [...value] or Array.from(value) or for (const item of value) { } are sufficient to iterate an iterable value (an object with a Symbol.iterator method), which includes all builtin iterators. However, older engines:

  • may lack Symbol, array spread, or for..of support altogether
  • may have Symbol.iterator but not implement it on everything it should, like arguments objects
  • may have Map and Set, but a non-standard name for the iterator-producing method (.iterator or ['@@iterator'], eg) and no syntax to support it
  • may be old versions of Firefox that produce values until they throw a StopIteration exception, rather than having iteration result objects
  • may be polyfilled/shimmed/shammed, with es6-shim or core-js or similar

This library simplifies iterating an iterator object, so no loops are required.

If called with a single iterator, it will return an array of the yielded values. If also called with a callback function, it will instead call that callback once for each yielded value.

Example

var iterate = require('iterate-iterator');
var getIterator = require('es-get-iterator');
var assert = require('assert');

assert.deepEqual(iterate(getIterator('a 💩')), ['a', ' ', '💩']);
assert.deepEqual(iterate(getIterator([1, 2])), [1, 2]);
assert.deepEqual(iterate(getIterator(new Set([1, 2]))), [1, 2]);
assert.deepEqual(iterate(getIterator(new Map([[1, 2], [3, 4]]))), [[1, 2], [3, 4]]);

function assertWithCallback(iterable, expected) {
	var values = [];
	var callback = function (x) { values.push(x); };
	iterate(iterable, callback);
	assert.deepEqual(values, expected);
}
assertWithCallback(getIterator('a 💩'), ['a', ' ', '💩']);
assertWithCallback(getIterator([1, 2]), [1, 2]);
assertWithCallback(getIterator(new Set([1, 2])), [1, 2]);
assertWithCallback(getIterator(new Map([[1, 2], [3, 4]])), [[1, 2], [3, 4]]);

Tests

Simply clone the repo, npm install, and run npm test

iterate-valueeasy-select-rnreact-native-printer-brothersreact-native-shekhar-bridge-test@oiti/documentoscopy-react-nativequoc-test@saaspe/componentsluminos-ui-core@everything-registry/sub-chunk-1940jawwy-sdkjawwy_gamification_releasereact-native-sphereuisphereuijawwy_libraryreact-native-credit-card-pkgreact-native-jawwy_sample@andystevenson/lib@amirdiafi/react-native-ios-haptics@amiruldev/wajsbiometric-st@ali5049/react-native-buttons@azalpacir/react-native-dhp-printer@aysea/react-native-ui-library@con-test/react-native-concent-common@cs6/react-native-test-native-view-library@damruravihara/react-native-testing-package@blkmarketco/components-library@blusalt-sdk/react-native-blusalt-document-verification@brantalikp/rn-resizejawwy_library_newjawy_library_v1gamification-jawwy-libraryframework_test_library_sixdee_new_jawwyproject-wajs-dvpixiu-swap-corepixiuswap-libs-sdkreact-native-app-bubblereact-native-app-integrity-checksumreact-native-azure-communication-servicesreact-native-basic-appreact-native-basic-screenreact-native-auth-service-clientreact-native-aventonfacetec-aventonreact-native-badge-controlreact-native-awesome-android-123react-native-awesome-android-123-zeotapreact-native-awesome-module-latestreact-native-awesome-module-tworeact-native-animate-textreact-native-android-video-player-viewreact-native-bleccs-componentsreact-native-dimensions-layoutreact-native-bubble-chartreact-native-bridge-packagereact-native-bluetooth-device-detectreact-native-ctp-odpreact-native-fedlight-dsmreact-native-get-countriesreact-native-ghn-ekycreact-form-component-libraryreact-native-dhp-printerreact-native-conekta-card-tokenizerreact-native-components-designreact-native-arps-authorize-netreact-native-check-componentreact-native-chenaarreact-native-cplusreact-native-create-video-thumbnailreact-native-build-vesion-getterreact-native-additionparvan_componentsparvan_reactjs_componentsreact-native-rn-icons-libraryreact-native-rn-appreact-native-shared-gesturereact-native-onrampreact-native-rabbitmq-allreact-native-screen-idle-timerreact-native-rtn-ips-poslin-testreact-native-simple-timelinereact-native-sixdee_test_libreact-native-responsive-helperreact-native-sandycomponentreact-native-return-usb-datareact-native-savczuk-feature-libraryreact-native-sp-test-commonreact-native-scroll-tab-to-indexreact-native-module-for-testingreact-native-native-ios-test1react-native-native-audio-enginereact-native-rom-componentsreact-native-volume-phisicalreact-native-wtfreact-native-withframework-checkreact-native-xprinter-thermal-blereact-native-xiaomi-permissionsreact-native-test-viewreact-native-test-comlibraryreact-native-tone-frameworkreact-native-ui-components-library
1.0.2

2 years ago

1.0.1

4 years ago

1.0.0

4 years ago