ImmutableJS - 从Map中删除元素

19

我有一个具有以下结构的地图:

{
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个回答

20

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

theFormerMap = theFormerMap.delete("2")

1
谢谢,我甚至尝试过这个,但意外地发现问题所在 - 参数必须是字符串。我给了一个数字,所以对于每个人来说 - 要小心。 - user3696212
这让我想到你的解决方案行不通,因为你的参数是字符串,但需要一个数字。无论如何,感谢你提供有关delete()方法的信息。 - user3696212
请记住,您可以在 Stack Overflow 代码片段中展示您的代码运行。 - Johann Echavarria
一些 JSLint 测试建议使用双引号来表示数据字符串。请查看以下链接获取更多详细信息:https://www.youtube.com/watch?v=5YZZp7HsQXY - Garry Taylor

7

只需使用delete方法并传递您想要删除的属性:

theFormerMap = theFormerMap.delete(2)

如果这不起作用,那么您可能是使用fromJS创建了theFormerMap:
Immutable.fromJS({1: {}, 2: {}}).delete(2)
=> Map { "1": Map {}, "2": Map {} }

由于javascript对象将数字键转换为字符串,因此Key 2实际上是一个字符串键,不会被删除。

但是,如果您在不使用fromJS的情况下构造它们,则Immutable.js支持具有整数键的映射:

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

如果您想使用 deleteIn 删除键2,可以这样调用它:theFormerMap.deleteIn([2]) - gabrielf

-5

如果您使用不可变数据

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接