2016-01-19 15 views
91

Sto lavorando con Javascript (ES6)/FaceBook reagendo e cercando di ottenere i primi 3 elementi di un array che varia in dimensioni. Vorrei fare l'equivalente di Linq take (n).Come ottenere il primo numero N di elementi da un array

Nel mio file JSX Ho il seguente:

var items = list.map(i => { 
    return (
    <myview item={i} key={i.id} /> 
); 
}); 

Quindi per ottenere i primi 3 articoli ho provato

var map = new Map(list); 
    map.size = 3; 
    var items = map(i => { 
     return (<SpotlightLandingGlobalInboxItem item={i} key={i.id} />); 
    }); 

Questo non ha funzionato come mappa non ha una funzione set .

Potete per favore aiutare?

+0

Forse sto equivoco il problema, ma perché non usare qualcosa come 'list.slice (0, 3),' e poi ribadire che? –

+0

Perché vuoi usare la mappa? Se comprendo correttamente il tuo requisito, puoi semplicemente usare slice per prendere i primi n elementi. –

+0

Se l'insegnante ha detto di usare la mappa? :) Mi dispiace se questa è una domanda legittima, ma mi è sembrata semplicemente un compito a casa. – diynevala

risposta

89

Credo che quello che stai cercando è:

// ...inside the render() function 

var size = 3; 
var items = list.slice(0, size).map(i => { 
    return <myview item={i} key={i.id} /> 
} 

return (
    <div> 
    {items} 
    </div> 
) 
155

per ottenere le prime n elementi di un array, utilizzare

array.slice(0, n); 
+0

Grazie, semplice e preciso. – user1892203

4

Non provare a fare che l'utilizzo di una funzione di mappa. La funzione mappa deve essere utilizzata per mappare i valori da una cosa all'altra. Quando il numero di input e output corrisponde.

In questo caso, utilizzare la funzione filtro disponibile anche nell'array. La funzione filtro viene utilizzata quando si desidera selezionare in modo selettivo valori che determinano determinati criteri. Poi si può scrivere il codice come

var items = list 
      .filter((i, index) => (index < 3)) 
      .map((i, index) => { 
        return (
        <myview item={i} key={i.id} /> 
        ); 
       }); 
+1

Nel complesso sei corretto, ma semanticamente dovresti usare il filtro per * prima * filtrare verso il basso il set di elementi, quindi mappare il set down filtrato se stai adottando questo approccio. – Chris

+1

La funzione filtro passerebbe attraverso tutti gli elementi dell'array, mentre la slice non lo farebbe, quindi è meglio usare la slice in modo performante, giusto? – elQueFaltaba

0

Questo potrebbe essere sorprendente, ma length proprietà di una matrice non è usato solo per ottenere il numero di serie elementi ma è anche scrivibile e può essere usato per impostare la lunghezza dell'array MDN link

Se l'array corrente non è più necessario e non ti interessa immutabilità o non vuoi allocare memoria, ad esempio per un gioco il modo più veloce è

arr.length = n 

a svuotare una matrice

arr.length = 0 
Problemi correlati