2014-11-07 4 views
15

ho bisogno di eseguire un'operazione simile al seguente scritto in C#:Skip e restituire gli oggetti dalla lista degli oggetti utilizzando Lodash/Sottolineatura

int[] items = { 1, 2, 3, 4, 5, 6, 7 }; 
var a = items.Skip(2).Take(3); 

che restituiscono 3, 4 e 5

Allo stesso modo ho bisogno di ignorare i record da un elenco di oggetti

$scope.myObject = [ { Editable: true, Name: "Daniel Test", Site: "SE100"}, 
        { Editable: true, Name: "Test new", Site: "SE100"}, 
        { Editable: false, Name: "Test", Site: "SE100"} ] 

ho bisogno di saltare primo disco e tornare i record rimanenti, che significa 1-esimo record di

Come posso fare questo usando lodash/sottolineatura?

risposta

21

di first e rest dovrebbe fare il trucco di sottolineatura:

var a = _.first(_.rest(items, 2), 3); 

e il resto su di essa la propria può essere utilizzato per saltare il primo record:

$scope.allButTheFirst = _.rest($scope.myObject, 1) 

concatenamento può essere usato per fare la dichiarazione un po ' più piacevole alla vista e quindi migliore trasparenza:

var a = _.chain(items) 
    .rest(2) 
    .first(3) 
    .value(); 

Come sottolineato nella risposta di @ RhysvanderWaerden, quando si usa lodash utilizzare drop anziché first e take anziché rest.

+0

Se si desidera ottenere il terzo elemento nell'array e si sta utilizzando il concatenamento, non aggiungere ".value()'. In questo caso, 'first()' restituisce già un valore scalare. – shovavnik

+0

Se non viene chiamato 'value', il risultato sarà un oggetto sottoposto a underscore wrapping e non il valore restituito dall'ultima funzione della catena. –

+1

hai ragione, a meno che tu non chiami 'first' senza argomenti, nel qual caso restituisce il primo valore e non il wrapper. Non ho testato 'first (1)', ma ho provato 'first()'. – shovavnik

11

In lodash v3 È possibile utilizzare i metodi slice e take. In alternativa è possibile utilizzare il metodo matrice slice

var offset = 2; 
 
var limit = 3; 
 
var items = [1, 2, 3, 4, 5, 6, 7]; 
 
var result1 = _(items).slice(offset).take(limit).value(); 
 
var result2 = items.slice(offset, offset + limit); 
 

 
document.getElementById('result1').innerText = result1.toString(); 
 
document.getElementById('result2').innerText = result2.toString();
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script> 
 
<pre> 
 
    lodash v3: <span id="result1"></span> 
 
    vanila JS: <span id="result2"></span> 
 
</pre>

14

In Lodash le first e rest funzioni si comportano in modo diverso per sottolineare. Vale a dire che non accettano un argomento di lunghezza. Invece dovrebbe essere usato drop e take:

const a = _.take(_.drop(items, skipCount), takeCount); 

// or 

const a = _(items).drop(skipCount).take(takeCount).value(); 
-1

È possibile utilizzare _.chunk(array,count).

Basta passare il conteggio per ottenere tutti gli array suddivisi in serie di dimensioni di conteggio, quindi passare il valore e si rock.+1

+0

var result = _.chunk (array, count) quindi restituisce array di conteggi. quindi funziona, per favore controlla. Ho usato in molti progetti. –

2

Avere questa

const skip = 0; 
const take = 40; 

Si può semplicemente fare questo

return _.slice(items, skip, skip + take); 

o semplicemente utilizzando js nativi

items.slice(skip, skip + take); 
1

/* PAGINATION WITH SORTING AND PAGING */ 
 
const page = 1; // input page, min value 1 
 
const limit = 2; // input limit min value 1 
 

 
/* INPUT ARRAY */ 
 
const array = [ 
 
    { Editable: true, Name: "Daniel Test", Site: "SE100"}, 
 
    { Editable: true, Name: "Test new", Site: "SE100"}, 
 
    { Editable: false, Name: "Test",  Site: "SE100"}, 
 
]; 
 

 
/* PAGINATION WITH SORTING AND PAGING */ 
 
const result = _(array) 
 
       .orderBy(['Name'], ['asc']) // sort by ascendind 
 
       .drop((page - 1) * limit) // page in drop function starts from 0 
 
       .take(limit)    // limit 2 
 
       .value(); 
 

 
console.log(result); 
 
console.log(JSON.stringify(result)); 
 
/* 
 
    RESULT: 
 
    limit 2 
 
    sort by ascendind 
 
    [ 
 
    { 
 
     "Editable":true, 
 
     "Name":"Daniel Test", // name sorted by ascendind 
 
     "Site":"SE100" 
 
    }, 
 
    { 
 
     "Editable":false, 
 
     "Name":"Test", 
 
     "Site":"SE100" 
 
    } 
 
    ] 
 
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.6/lodash.min.js"></script>

Problemi correlati