2009-09-06 13 views
61

Datocome rimuovere il valore della chiave + dal cancelletto in javascript

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key2'] = { Name: 'Object 2' }; 
myHash['key3'] = { Name: 'Object 3' }; 

come faccio a rimuovere key2, e object 2 dalla hash, che finisce in uno stato come se ho fatto:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key3'] = { Name: 'Object 3' }; 

elimina non fa quello che voglio;

delete myHash['key2'] 

mi dà semplicemente questo:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myhash['key2'] = null; 
myHash['key3'] = { Name: 'Object 3' }; 

gli unici documenti che posso trovare sui splice e slice accordo con gli indicizzatori interi, che io non sono.

Edit: anche io non so che 'key2' è necessariamente in posizione [1]

UPDATE

OK leggero specchietto per le allodole, eliminare sembra fare quello che voglio in superficie, tuttavia, im utilizzando json2.js alla stringa i mio oggetto di jSON per spingere indietro al server,

dopo ive cancellato, myHash viene serializzato come:

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ] 

Si tratta di un bug in json2.js? o è qualcosa che sto facendo male con l'eliminazione?

Grazie

+3

Quello che stai facendo è aggiungere proprietà a un oggetto, che è diverso dall'aggiunta di elementi a un array/hash. Stai cercando un modo per rimuovere una proprietà, più o meno. Prova a eliminare myHash.key1, come menzionato in altri commenti. –

+2

Se è una tabella hash, dovresti usare 'var myHash = new Object()' invece di 'var myHash = new Array()'. – cprcrack

risposta

150

Siete alla ricerca di delete:

delete myhash['key2'] 

Vedi l'Un'altra opzione Core Javascript Guide

+1

Ho pensato che fosse corretto, ecco perché l'ho provato in primo luogo. Fa funzionare _seem_, il mio problema sta in realtà in Json.stringify, mal aggiornamento la domanda –

+6

usa invece la funzione di splicing. Elimina lascia un buco nell'array. –

+0

Questo lavoro per me. Grazie! –

1

può essere questo John Resig remove method. può adattarsi meglio a ciò di cui hai bisogno. se conosci l'indice nell'array.

+2

Beh, non avendo l'indice è esattamente quello che la domanda afferma –

+0

Ehi @AndrewBullock Ho una query ottengo array JSON Ex: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \ "}] ma voglio ottenere come [{" DE ":" 3 "}] come questo, ma non ottengo questo risultato Please help me –

11

Perché si utilizza new Array(); per hash? Devi invece usare new Object().

E penso che otterrete quello che volete.

+4

Non mi piace affatto affatto. Preferisco var myHash = []; – Nosredna

+10

In questo caso, myHash = {}; :-) – Nosredna

+0

@Nosredna totalmente d'accordo :) –

6

Si dice che non si sa necessariamente che "key2" è in posizione [1]. Bene, non lo è. La posizione 1 sarebbe occupata da myHash [1].

Si sta abusando di array JavaScript, che (come le funzioni) consentono gli hash di chiavi/valori. Anche se JavaScript lo consente, non offre servizi per affrontarlo, come farebbe un linguaggio progettato per array associativi. I metodi di array JavaScript funzionano solo con le proprietà numerate.

La prima cosa da fare è passare agli oggetti anziché agli array. Non hai una buona ragione per usare un array qui piuttosto che un oggetto, quindi non farlo. Se vuoi usare un array, annota semplicemente gli elementi e rinuncia all'idea di hash. L'intento di un array è di contenere informazioni che possono essere indicizzate in ordine numerico.

È possibile, naturalmente, inserire un hash (oggetto) in un array se lo si desidera.

myhash[1]={"key1","brightOrangeMonkey"}; 
+0

hai ragione, grazie :) vedi la mia risposta –

Problemi correlati