2014-04-07 3 views
26

Esiste un modo "intelligente" di sottotitoli per rimuovere tutte le coppie chiave/valore da una matrice di oggetti?Underscore: rimuovi tutte le coppie chiave/valore da una matrice di oggetti

ad es. Ho seguito matrice:

var arr = [ 
     { q: "Lorem ipsum dolor sit.", c: false }, 
     { q: "Provident perferendis veniam similique!", c: false }, 
     { q: "Assumenda, commodi blanditiis deserunt?", c: true }, 
     { q: "Iusto, dolores ea iste.", c: false }, 
    ]; 

e voglio ottenere il seguente:

var newArr = [ 
     { q: "Lorem ipsum dolor sit." }, 
     { q: "Provident perferendis veniam similique!" }, 
     { q: "Assumenda, commodi blanditiis deserunt?" }, 
     { q: "Iusto, dolores ea iste." }, 
    ]; 

posso ottenere questo lavoro con il JS di seguito, ma non proprio felice con le mie soluzioni:

for (var i = 0; i < arr.length; i++) { 
    delete arr[i].c; 
}; 

Qualche suggerimento molto apprezzato.

risposta

46

È possibile utilizzare map e omit in congiunzione per escludere proprietà specifiche, come questo:

var newArr = _.map(arr, function(o) { return _.omit(o, 'c'); }); 

O map e pick per includere solo proprietà specifiche, come questo:

var newArr = _.map(arr, function(o) { return _.pick(o, 'q'); }); 
+0

mi ha battuto ad esso ! @ User789 Puoi anche usare _.pick se vuoi l'effetto opposto: 'var newArr = _.map (arr, function (o) {return _.pick (o, 'q');});' – Pete

+3

@ User789 Inoltre, se si desidera semplicemente un array, è anche possibile utilizzare il metodo di pluck: 'var newArr = _.pluck (arr, 'q');' – Pete

+0

@mister_rampage Sì, anche questo è un buon punto. –