2013-02-09 6 views
6

La libreria prototypeJS ha un metodo Object.values ​​() che restituisce una matrice di valori in un oggetto.Object.values ​​() in jQuery

EG:

var myObj = { 
    "key1" : "val1" 
    "key2" : "val2" 
} 
Object.values(myObj) //returns ["val1", "val2"] 

Esiste un metodo jQuery che fa la stessa cosa?

+0

No, non c'è. È facile da creare però. –

risposta

10

Io non credo che ci sia un metodo che lo fa direttamente, ma è possibile utilizzare $.map():

$.map(myObj, function(val, key) { return val; }); //returns ["val1", "val2"] 

(Si noti però che se il callback restituisce null o undefined per una determinata proprietà che oggetto non sarà incluso nel nuovo array, quindi se il tuo oggetto potrebbe avere proprietà con quei valori dovrai farlo in un altro modo È abbastanza facile codificare da zero, con un ciclo for..in.)

+0

Dovrebbe essere '... funzione (chiave, val) ...' invece di '... funzione (val, chiave) ...' –

+2

@AndreiStalbe - No, non dovrebbe. Controlla [il documento] (http://api.jquery.com/jQuery.map/). – nnnnnn

3

prototypejs 'values metodo estende JavaScript incorporato Object oggetto. Non c'è nulla ti impedisce di fare lo stesso:

Object.values = function(object) { 
    var values = []; 
    for(var property in object) { 
    values.push(object[property]); 
    } 
    return values; 
} 


var foo = {a:1, b:2, c:3}; 
console.log(Object.values(foo)); 
// [1, 2, 3] 

In alternativa, è possibile aggiungere il metodo descritto sopra per l'oggetto jQuery, se si preferisce non manomettere Object:

$.values = function() { ... } 
+1

fantastico! questo è perfetto! grazie mille! È perfetto dal momento che non è necessario aggiungere una nuova libreria al progetto. – sksallaj

0

Underscorejs ha la _.values metodo: _.values({one : 1, two : 2, three : 3}); => [1, 2, 3]

Questa libreria aumenta molto bene JQuery, oltre a funzionare meravigliosamente in prototypejs.

1

Utilizzando ES6, è possibile effettuare le seguenti operazioni:

Object.values = x => 
     Object.keys(x).reduce((y, z) => 
      y.push(x[z]) && y, []); 

Questo restituisce semplicemente un array contenente i valori dell'oggetto. Non c'è bisogno di JQuery, _ o qualsiasi altra cosa.


nota:Object.values() è attualmente in bozza per ES7

Utilizzando babel, l'installazione di

  • babel-preimpostato-es2017
  • babel-plugin-transform-runtime

fornisce supporto per Object.values/Object.entries e altre funzionalità ES2017.

Come da raccomandazione dai moduli, configurare il file .babelrc con il seguente:

{ 
    "plugins": ["transform-runtime"], 
    "presets": ["es2017"] 
}