Njia ya forEach() hutekeleza kazi iliyotolewa mara moja kwa kila kipengele cha safu.
Chanzo cha mfano huu wa mwingiliano huhifadhiwa kwenye hazina ya GitHub. Iwapo ungependa kuchangia mradi wa mifano shirikishi, tafadhali unganisha https://github.com/mdn/interactive-examples na ututumie ombi la kuvuta.
Syntax arr .forEach(callback(currentValue [, index [, array]]) [, thisArg ]) Vigezo vya urejeshaji wa kazi Kazi ya kutekeleza kwenye kila kipengele. Inakubali kati ya hoja moja na tatu: Thamani ya sasa Kipengele cha sasa kinachakatwa katika safu. index Hiari Fahirisi ya sasaThamani katika safu. safu ya Hiari Safu yaEach() iliitishwa. thisArg Optional Value kutumia kama hii wakati wa kutekeleza callback . Maelezo ya thamani ya kurejeshaforEach() huita kitendakazi kilichotolewa mara moja kwa kila kipengele katika safu katika mpangilio wa kupanda. Haijaombwa kwa sifa za faharasa ambazo zimefutwa au ambazo hazijaanzishwa. (Kwa safu chache, .)
callback inaalikwa kwa hoja tatu:
Ikiwa kigezo thisArg kimetolewa kwa forEach() , kitatumika kama callback"s thamani hii. Thamani ya thisArg hatimaye inaonekana kwa kurudisha nyuma hubainishwa kulingana na kanuni za kawaida za kubainisha hii inayoonekana na chaguo la kukokotoa .
Masafa ya vipengele vilivyochakatwa na forEach() yamewekwa kabla ya ombi la kwanza la callback . Vipengele ambavyo vimeambatishwa kwenye safu baada ya simu kwa forEach() kuanza havitatembelewa kwa kurudisha nyuma . Iwapo vipengele vilivyopo vya mkusanyiko vitabadilishwa au kufutwa, thamani yake kama inavyopitishwa kwa urejeshaji simu itakuwa thamani wakati wa kutembeleaEach(); vipengele vinavyofutwa kabla ya kutembelewa havitembelewi. Ikiwa vipengele ambavyo tayari vimetembelewa vitaondolewa (k.m. kutumia shift()) wakati wa kurudia, vipengee vya baadaye vitarukwa. (Angalia mfano huu hapa chini.)
forEach() hutekeleza kitendakazi cha kurudi nyuma mara moja kwa kila kipengele cha safu; tofauti na map() au reduce() huwa inarudisha thamani ambayo haijafafanuliwa na haiwezi kufungwa. Kesi ya kawaida ya utumiaji ni kutekeleza athari mwishoni mwa mnyororo.
forEach() haibadilishi safu ambayo inaitwa. (Hata hivyo, kurudi nyuma kunaweza kufanya hivyo)
Hakuna njia ya kusimamisha au kuvunja kitanzi cha forEach() isipokuwa kwa kutupa ubaguzi. Ikiwa unahitaji tabia kama hiyo, forEach() njia ni zana isiyo sahihi.
Kukomesha mapema kunaweza kukamilishwa na:
Mbinu za safu: every() , some() , find() , na findIndex() jaribu vipengee vya safu kwa kihusishi kinachorudisha thamani ya ukweli ili kubaini ikiwa marudio zaidi yanahitajika.
Mifano Hakuna utendakazi wa thamani ambazo hazijaanzishwa (safu chache) const arraySparse = let numCallbackRuns = 0 arraySparse.forEach(function(element)( console.log(element) numCallbackRuns++ )) console.log("numCallbackRuns: ", numCallbackRuns: ", numCallbackRuns: ", numCallback 1 / / 3 // 7 // numCallbackRuns: 3 // maoni: unavyoweza kuona thamani inayokosekana kati ya 3 na 7 "haikuomba chaguo la kurudisha nyuma. Kubadilisha kitanzi kuwa forEach const items = ["item1", "item2 ", "item3"] const copy = // kabla ya (let i = 0; i< items.length; i++) { copy.push(items[i]) } // after items.forEach(function(item){ copy.push(item) }) Printing the contents of an arrayKumbuka: Ili kuonyesha maudhui ya mkusanyiko katika kiweko, unaweza kutumia console.table() , ambayo huchapisha toleo lililoumbizwa la safu.
Mfano ufuatao unaonyesha mbinu mbadala, kwa kutumia forEach() .
Nambari ifuatayo inaweka mstari kwa kila kipengele katika safu:
Kazi logArrayElements(element, index, array) ( console.log("a[" + index + "] = " + element) ) // Ona kwamba fahirisi ya 2 imerukwa, kwa kuwa hakuna kipengee // nafasi hiyo kwenye safu... .forEach(logArrayElements) // kumbukumbu: // a = 2 // a = 5 // a = 9
Kwa kutumia hiiArgMfano ufuatao (uliotungwa) husasisha mali ya kitu kutoka kwa kila ingizo kwenye safu:
Kihesabu cha Kazi() ( this.sum = 0 this.count = 0 ) Counter.prototype.add = function(array) ( array.forEach(function(entry) ( this.sum += entry ++this.count ), hii ) // ^---- Kumbuka ) const obj = new Counter() obj.add() obj.count // 3 obj.sum // 16
Kwa kuwa kigezo hiki cha thisArg (hii) kimetolewa kwa forEach() , kinapitishwa kurudisha nyuma kila wakati kinapoombwa. Kipigio simu kinakitumia kama thamani yake hii.
Kitendaji cha kunakili kipengeeNambari ifuatayo huunda nakala ya kitu fulani.
Kuna njia tofauti za kuunda nakala ya kitu. Ifuatayo ni njia moja tu na inawasilishwa ili kueleza jinsi Array.prototype.forEach() inavyofanya kazi kwa kutumia ECMAScript 5 Object.* utendaji wa kipengele wa meta.
Nakala ya utendakazi(obj) ( const copy = Object.create(Object.getPrototypeOf(obj)) const propNames = Object.getOwnPropertyNames(obj) propNames.forEach(function(jina) ( const desc = Object.getOwnProperty) Names .defineProperty(copy, name, desc) )) return copy ) const obj1 = ( a: 1, b: 2 ) const obj2 = copy(obj1) // obj2 inaonekana kama obj1 sasa
Ikiwa safu itarekebishwa wakati wa kurudia, vipengele vingine vinaweza kurukwa.Mfano ufuatao umeweka kumbukumbu "moja" , "mbili" , "nne" .
Wakati ingizo lililo na thamani "two" is reached, the first entry of the whole array is shifted off-resulting in all remaining entries moving up one position. Because element "four" is now at an earlier position in the array, "three" will be skipped.!}
forEach() haifanyi nakala ya safu kabla ya kurudia.
Acha maneno = ["moja", "mbili", "tatu", "nne"] maneno.forEach(function(neno) ( console.log(word) if (neno === "mbili") (words.shift( ) ) )) // moja // mbili // nne
Sawazisha safuMfano ufuatao ni hapa tu kwa madhumuni ya kujifunza. Ikiwa ungependa kusawazisha safu kwa kutumia mbinu zilizojengewa ndani unaweza kutumia Array.prototype.flat() (ambayo inatarajiwa kuwa sehemu ya ES2019, na tayari inatekelezwa katika baadhi ya vivinjari).
/** * Flattens kupita safu katika safu moja dimensional * * @params (safu) arr * @returns (safu) */ kazi flatten(arr) ( const result = arr.forEach((i) => ( if (Array. isArray(i)) ( result.push(...flatten(i)) ) else ( result.push(i) )) return result ) // Usage const problem = , 8, 9]] flatten(problem) //
Kumbuka kuhusu kutumia Ahadi au vitendaji vya ulandanishi wacha ukadiriaji = let sum = 0 let sumFunction = kazi ya kusawazisha (a, b) ( rudisha + b ) ratings.forEach(async function(rating) ( sum = await sumFunction(jumla, rating) ) ) console.log(jumla) // Pato linalotarajiwa: 14 // Pato halisi: 0 VipimoRasimu ya Hivi Punde ya ECMAScript (ECMA-262) |
Rasimu | |
ECMAScript 2015 (Toleo la 6, ECMA-262) Ufafanuzi wa "Array.prototype.forEach" katika vipimo hivyo. |
Kawaida | |
ECMAScript 5.1 (ECMA-262) Ufafanuzi wa "Array.prototype.forEach" katika vipimo hivyo. |
Kawaida | Ufafanuzi wa awali. Inatekelezwa katika JavaScript 1.6. |
Jedwali la uoanifu katika ukurasa huu limetolewa kutoka kwa data iliyopangwa. Iwapo ungependa kuchangia data, tafadhali angalia https://github.com/mdn/browser-compat-data na ututumie ombi la kuvuta.
Sasisha data ya uoanifu kwenye GitHub
Seva ya Simu ya Kompyuta ya mezani | ||||||||||||
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js | ||||||||||||
Usaidizi kamili wa Chrome 1 | Msaada kamili wa Edge 12 | Msaada kamili wa Firefox 1.5 | Msaada kamili wa IE 9 | Msaada kamili wa Opera Ndio | Msaada kamili wa Safari 3 | WebView Android Usaidizi kamili ≤37 | Usaidizi kamili wa Chrome Android 18 | Msaada kamili wa Firefox Android 4 | Opera Android Msaada kamili Ndiyo | Usaidizi kamili wa Safari iOS 1 | Samsung Internet Android Msaada Kamili 1.0 | nodejs Msaada kamili Ndiyo |
Sasisho la mwisho: 03/26/2018
Kitu cha Mpangilio kinawakilisha safu na hutoa idadi ya sifa na mbinu ambazo tunaweza kuendesha safu.
Kuanzisha safuUnaweza kuunda safu tupu kwa kutumia mabano ya mraba au mjenzi wa Array:
Var watumiaji = safu mpya (); var people =; console.log(watumiaji); // Array console.log(watu); //Safu
Unaweza mara moja kuanzisha safu na idadi fulani ya vitu:
Var users = new Array("Tom", "Bill", "Alice"); var people = ["Sam", "John", "Kate"]; console.log(watumiaji); // ["Tom", "Bill", "Alice"] console.log(people); // ["Sam", "John", "Kate"]
Unaweza kufafanua safu na kuongeza vipengee vipya kwake unapoendelea:
Var watumiaji = safu mpya (); watumiaji = "Tom"; watumiaji = "Kate"; console.log(watumiaji); // "Tom" console.log (watumiaji); // haijafafanuliwa
Haijalishi kwamba kwa chaguo-msingi safu imeundwa kwa urefu wa sifuri. Kwa kutumia faharasa, tunaweza kubadilisha kipengele kimoja au kingine katika safu katika faharasa mahususi.
urefuIli kujua urefu wa safu, tumia mali ya urefu:
Var matunda = safu mpya (); matunda = "apples"; matunda = "pears"; matunda = "plum"; document.write("Katika safu ya matunda " + fruit.length +" kipengele:
"); kwa (var i=0; i< fruit.length; i++)
document.write(fruit[i] + "
");
Kwa kweli, urefu wa safu itakuwa index ya kipengele cha mwisho pamoja na moja. Kwa mfano:
Var watumiaji = safu mpya (); // kuna vipengele 0 katika safu watumiaji = "Tom"; watumiaji = "Kate"; watumiaji = "Sam"; kwa(var i=0; i 0) (matokeo = kweli;) rudisha matokeo; ); var kupita = nambari. kila (hali); hati.andika(iliyopitishwa); // uongo
Kila() njia hupitishwa kazi inayowakilisha hali kama kigezo. Kazi hii inachukua vigezo vitatu:
Hali ya utendakazi(thamani, faharasa, safu) ( )
Kigezo cha thamani kinawakilisha kipengele cha safu cha sasa kinachorudiwa, kigezo cha faharasa kinawakilisha faharasa ya kipengele hicho, na kigezo cha safu hupitisha marejeleo kwa safu.
Katika chaguo hili la kukokotoa tunaweza kuangalia thamani ya kipengele kilichopitishwa kwa kufuata hali fulani. Kwa mfano, katika mfano huu tunaangalia kila kipengele cha safu ili kuona ikiwa ni kubwa kuliko sifuri. Ikiwa ni kubwa zaidi, basi tunarudisha thamani true , yaani, kipengele kinakidhi masharti. Ikiwa chini, basi urejee uongo - kipengele haifikii hali hiyo.
Matokeo yake, wakati nambari. kila (hali) njia inaitwa, inarudia kupitia vipengele vyote vya safu ya nambari na kuwapitisha moja kwa moja kwa kazi ya hali. Ikiwa chaguo hili la kukokotoa litarudi kuwa kweli kwa vipengele vyote, basi kila () njia inarudi kuwa kweli. Ikiwa angalau kipengee kimoja hakilingani na hali, basi kila () njia inarudi false .
baadhi ()Some() njia ni sawa na kila() njia, inakagua tu ikiwa angalau kipengee kimoja kinalingana na hali. Na katika kesi hii, some() njia inarudi true . Ikiwa hakuna vipengele vinavyolingana na hali katika safu, uongo hurejeshwa:
Nambari za Var = [ 1, -12, 8, -4, 25, 42]; hali ya kazi(thamani, faharisi, safu) ( var tokeo = uongo; ikiwa (thamani === 8) (matokeo = kweli; ) matokeo ya kurudisha; ); var kupita = namba.some(hali); // kweli
chujio ()Kichujio() mbinu, kama some() na every() , inakubali kitendakazi cha hali. Lakini wakati huo huo inarudisha safu ya vitu hivyo ambavyo vinakidhi hali hii:
Nambari za Var = [ 1, -12, 8, -4, 25, 42]; hali ya utendaji kazi(thamani, faharisi, safu) ( var tokeo = uongo; ikiwa (thamani > 0) ( matokeo = kweli; ) rudisha matokeo; ); var filteredNumbers = numbers.filter(condition); kwa (var i=0; i< filteredNumbers.length; i++)
document.write(filteredNumbers[i] + "
");
Toleo la kivinjari:
1 8 25 42
forEach() na ramani()Njia za forEach() na map() zinarudia vipengele na kufanya shughuli fulani juu yake. Kwa mfano, kuhesabu miraba ya nambari katika safu, unaweza kutumia nambari ifuatayo:
Nambari za Var = [1, 2, 3, 4, 5, 6]; kwa(var i = 0; i= 0; --index) ( console.log(a); )
Walakini, katika injini za kisasa za JavaScript michezo kama hiyo ya uboreshaji kawaida haimaanishi chochote.
Walakini, katika hali zingine, kama vile kurudia juu ya safu chache, kwa...in inaweza kuwa muhimu, mradi tu uchukue tahadhari, kama inavyoonyeshwa kwenye mfano hapa chini:
// a - safu ndogo var a =; a = "a"; a = "b"; a = "c"; kwa (var key in a) ( ikiwa (a.hasOwnProperty(key) && /^0$|^\d*$/.test(key) && key