2015-06-30 4 views
10

Ich habe eine Karte mit dieser Struktur:ImmutableJS - löschen Element von Map

{ 
1: {}, 
2: {} 
} 

Und ich möchte 2 löschen: {} von ihm (natürlich - Rückkehr neue Kollektion ohne diese). Wie kann ich es tun? Ich habe versucht, diese, aber etwas falsch ist:

theFormerMap.deleteIn([],2) //[] should mean that it's right in the root of the map, and 2 is the name of the object I want to get rid of 

Antwort

12

einfach die löschen Methode verwenden und die Eigenschaft in doppelte Anführungszeichen:

theFormerMap = theFormerMap.delete("2") 
+0

Danke, ich habe dies auch versucht, aber zufällig gefunden, wo das Problem war - das Argument String sein . Ich habe dort eine Nummer angegeben, also für alle - sei vorsichtig damit. – user3696212

+0

..das bringt mich zu der Tatsache, dass Ihre Lösung nicht funktionieren würde, weil Ihr Argument String war, aber eine Nummer benötigt wurde. Wie auch immer, danke für die Info über die Methode delete(). – user3696212

+0

Denken Sie daran, dass Sie Ihren Code hier in einem Stapelüberlaufcode-Snippet anzeigen lassen können. –

-5

Wenn Sie immutable-data verwenden:

var immutableData = require("immutable-data") 
var oldObj = { 
    1: {}, 
    2: {} 
} 
var data = immutableData(oldObj) 
var immutableObj = data.pick() 

//modify immutableObj by ordinary javascript method 
delete immutableObj[2] 

var newObj = immutableObj.valueOf() 

console.log(newObj)     // { '1': {} } 
console.log(newObj===oldObj)   // [ { a: '2', b: '2' } ] 
console.log(newObj[1]===oldObj[1]) // true 
2

Verwenden Sie einfach die Methode delete und übergeben Sie die Eigenschaft, die Sie löschen möchten:

theFormerMap = theFormerMap.delete(2) 

Wenn dies nicht, dann haben wahrscheinlich theFormerMapfromJS mit erstellt Sie arbeiten:

Immutable.fromJS({1: {}, 2: {}}).delete(2) 
=> Map { "1": Map {}, "2": Map {} } 

Key 2 wird nicht entfernt, wie es ist, in der Tat, einen String-Schlüssel. Der Grund ist, dass JavaScript-Objekte numerische Schlüssel in Zeichenfolgen konvertieren.

jedoch tut Immutable.js Bebauungsmatrizen mit Integer-Schlüssel, wenn man sie konstruieren, ohne fromJS mit:

Immutable.Map().set(1, Immutable.Map()).set(2, Immutable.Map()).delete(2) 
=> Map { 1: Map {} } 
+0

Und wenn Sie 'deleteIn' verwenden möchten, um Schlüssel 2 zu entfernen, nennen Sie es wie' 'TheFormerMap.deleteIn ([2])' ' – gabrielf

Verwandte Themen