Ответ 1
Просто используйте метод удалить и свойство в двойных кавычках:
theFormerMap = theFormerMap.delete("2")
У меня есть карта с этой структурой:
{
1: {},
2: {}
}
И я хотел бы удалить из него 2: {} (конечно - вернуть новую коллекцию без этого). Как мне это сделать? Я пробовал это, но что-то не так:
theFormerMap.deleteIn([],2) //[] should mean that it right in the root of the map, and 2 is the name of the object I want to get rid of
Просто используйте метод удалить и свойство в двойных кавычках:
theFormerMap = theFormerMap.delete("2")
Просто используйте метод удалить и передайте свойство, которое вы хотите удалить:
theFormerMap = theFormerMap.delete(2)
Если это не работает, вы, вероятно, создали theFormerMap
с помощью fromJS
:
Immutable.fromJS({1: {}, 2: {}}).delete(2)
=> Map { "1": Map {}, "2": Map {} }
Ключ 2 не удаляется, поскольку это, по сути, строковый ключ. Причина в том, что объекты javascript преобразуют числовые ключи в строки.
Однако Immutable.js поддерживает карты с целыми ключами, если вы их создаете без использования fromJS
:
Immutable.Map().set(1, Immutable.Map()).set(2, Immutable.Map()).delete(2)
=> Map { 1: Map {} }
Если вы используете 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