आप इस छोटे स्निपेट का उपयोग सार्वभौमिक के लिए प्रत्येक के लिए कर सकते हैं। हालांकि यह lodash का उपयोग करता है और इसे काफी बढ़ाया जा सकता है।
import lodashForEach from 'lodash/forEach';
import entries from 'lodash/entries';
/**
* @since [email protected]
* @param {Array|Map|Object|Set|WeakMap|WeakSet} iterable
* @param {Function} iteratee
* @example
* const iterable = new Map();
* iterable.set('somekey1', 1);
* iterable.set('somekey2', 2);
* // or
* const iterable = new Set();
* iterable.add("entry1");
* iterable.add("entry2");
* // run function
* forEach(iterable, (value, key) => {
* console.group('-');
* console.info('KEY');
* console.log(key);
* console.info('VALUE');
* console.log(value);
* console.groupEnd();
* });
*/
function forEach(iterable, iteratee) {
lodashForEach((iterable instanceof Set || iterable instanceof WeakSet) ? Array.from(iterable) : entries(iterable), (entry, index, collection) => {
iteratee(entry[1], entry[0], collection, index);
});
return iterable;
}
export default forEach;
अद्यतन
के बाद लंबे समय से पारित कर दिया है कि मैं इस सवाल का जवाब गलत पाया। यह बात कोर-जेएस पॉलीफिल लाइब्रेरी में बग तय की गई है जहां यह देशी वीकैप कार्यान्वयन को अपने आप के साथ कार्यान्वित करता है। तो मेरा समाधान आधुनिक ब्राउज़रों में मान्य नहीं है।
function forEach(iterable, iteratee) {
switch (true) {
case Array.isArray(iterable) || iterable instanceof Map:
iterable.forEach(iteratee);
break;
case iterable instanceof Set:
Array.from(iterable).forEach(iteratee);
break;
case iterable instanceof WeakMap || iterable instanceof WeakSet:
// some kind of warning
break;
default:
Object.keys(iterable).forEach((key) => iteratee.call(null, iterable[key], key));
break;
}
return iterable;
}
नहीं है, कमजोर नक्शे iterable नहीं हैं। कंसोल जादू करता है (हे, यह सिंक्रोनस के साथ-साथ वादे के मूल्य भी दिखाता है)। – Bergi
ठीक है - मैं वह जादू करना चाहता हूं, कोई सुझाव? :- डी – commonpike
डीबग इंटरफ़ेस का उपयोग करने वाले एप्लिकेशन को लिखें :-) – Bergi