ImmutableJS - 从Map中删除元素

时间:2015-06-30 02:06:48

标签: javascript immutable.js

我有一个这种结构的地图:

{
1: {},
2: {}
}

我想从中删除2:{}(当然 - 如果没有这个,则返回新的集合)。我该怎么做? 我试过这个,但是出了点问题:

 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

3 个答案:

答案 0 :(得分:16)

只需使用删除方法和双引号中的属性:

theFormerMap = theFormerMap.delete("2")

答案 1 :(得分:5)

只需使用删除方法并传递您要删除的媒体资源:

theFormerMap = theFormerMap.delete(2)

如果这不起作用,那么您可能已使用theFormerMap创建了fromJS

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

键2未被删除,实际上是字符串键。原因是javascript对象将数字键转换为字符串。

然而,如果你在不使用fromJS的情况下构造它们,Immutable.js确实支持具有整数键的地图:

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

答案 2 :(得分:-5)

如果您使用immutable-data

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