hey ragazzi sono nuovo di JS e fondamentalmente sto imparando nuove cose ogni giorno, sto solo imparando cose come, come aggiornare dinamicamente un array e roba, comunque, di solito cerco di raccogliere snippet JS puliti della rete e debuggale, finché non capisco cosa significa veramente. ecco un frammento che ho trovato oggi:comprensione Doppia dichiarazione di ritorno è Javascript
var array1 = [
{ tagId: 1, tagName: 'tag 1' },
{ tagId: 2, tagName: 'tag 2' },
{ tagId: 3, tagName: 'tag 3' },
{ tagId: 4, tagName: 'tag 4' }
];
var array2 = [
{ tagId: 1, tagName: 'tag 1' },
{ tagId: 2, tagName: 'tag 2' },
{ tagId: 8, tagName: 'tag 8' }
];
var array3 = [
{ tagId: 1, tagName: 'tag 1' },
{ tagId: 0, tagName: 'tag 0' },
{ tagId: 9, tagName: 'tag 3' },
{ tagId: 12, tagName: 'tag 12' },
{ tagId: 13, tagName: 'tag 3' },
{ tagId: 14, tagName: 'tag 2' },
{ tagId: 6, tagName: 'tag 6' },
];
var a4 = common(array1, array2, array3)
console.log(a4);
function common(/*…*/) {
var a = arguments;
res = a[0]
for (var i = 1; i < a.length; i++) {
res = res.filter(function (el) {
return a[i].filter(function (el2) {
return el2.tagId === el.tagId
}).length
})
}
return res
}
fondamentalmente i soli frammento attraverso array con valori letterali oggetto in loro e li filtra fuori. ora, ecco la mia domanda. essendo un novizio di JS, ho trovato il caso interessante di vedere un sacco di codice JS usare l'istruzione return
in rapida successione, o meglio uno dopo l'altro, spesso sono nidificati, questo è un caso molto interessante per me, perché di solito io Immagino che una sola dichiarazione di ritorno dovrebbe essere tutto ciò che serve.
in ogni modo, di nuovo al mio esempio e quello che la mia difficoltà è davvero, se si vede il codice all'interno del common function
, u'll vedere il codice qui sotto:
res = res.filter(function (el) {
return a[i].filter(function (el2) {
return el2.tagId === el.tagId
}).length
})
che davvero non riesco a capire le dichiarazioni doppio ritorno . quello che ho capito è, return el2.tagId === el.tagId
restituisce vero o falso e tornare
a[i].filter(function (el2) {
return el2.tagId === el.tagId
}).length
restituisce la lunghezza, e penso che dovrebbe essere un intero, ma che cosa è l'ordine di esecuzione ritorno ?? chi è return el2.tagId === el.tagId
tornando a ?? .
Sono sempre perplesso quando vedo la dichiarazione di doppio reso, qualcuno può spiegarmi questo per favore?
jsfiddle here.
MODIFICA :: prova ad essere un po 'elaborato nella tua risposta.
Grazie.
Alex-Z.
!! scusa per essere un dolore nel posto sbagliato, ho qualche altra domanda, puoi spiegare l'intenzione degli autori di aggiungere il '.length' alla fine della prima dichiarazione di ritorno ?? –
se tu fossi il compilatore JS, come interpreteresti 'res = res.filter (function (el) { return a [i] .filter (function (el2) { return el2.tagId === el.tagId }). length) }), come gestiresti il codice, a che punto si verificherà la coercizione? e cosa vorresti eventualmente tornare a ris. –
Il mio obiettivo era quello di spiegare questo, decostruendo l'espressione. Hai letto i documenti su 'array.filter()'? C'è una parte particolare della valutazione che non è chiara? – joemfb