Javascript 如何在Immutable js中删除映射内的数组元素?
我对Immutable还不熟悉,对于如何删除映射中的数组元素,我感到非常困惑。我不想使用Javascript 如何在Immutable js中删除映射内的数组元素?,javascript,immutable.js,Javascript,Immutable.js,我对Immutable还不熟悉,对于如何删除映射中的数组元素,我感到非常困惑。我不想使用fromJs。我知道有很多关于堆栈溢出的资源,但是这个方法对我不起作用 const test=Map({ arr:[{ 身份证号码:1 }, { 身份证号码:2 }, { 身份证号码:3 }] }); console.log(test.get('arr')) 以前 arr:[{id:1},{id:2},{id:3}] 我想删除id:3 arr:[{id:1},{id:2}] 使用Immutable.js
fromJs
。我知道有很多关于堆栈溢出的资源,但是这个方法对我不起作用
const test=Map({
arr:[{
身份证号码:1
}, {
身份证号码:2
}, {
身份证号码:3
}]
});
console.log(test.get('arr'))
以前
arr:[{id:1},{id:2},{id:3}]
我想删除id:3
arr:[{id:1},{id:2}]
使用Immutable.js时,通常不应使用普通js数据结构。因此,您可以创建如下数据:
test = Map({ arr: List([ Map({ id: 1 }), Map({ id: 2 }), Map({ id: 3 }) ]) })
并可以按如下方式移除第三个对象:
test.set('arr', test.get('arr').filter(x => x.get('id') != 3))
使用Immutable.js时,通常不应使用普通js数据结构。因此,您可以创建如下数据:
test = Map({ arr: List([ Map({ id: 1 }), Map({ id: 2 }), Map({ id: 3 }) ]) })
并可以按如下方式移除第三个对象:
test.set('arr', test.get('arr').filter(x => x.get('id') != 3))
这里的基本问题是,当您创建贴图时,它只是粗略地将对象关键点转换为贴图关键点。它不会深度转换对象。这是可以的,但是你必须正确处理这个案例,当你第一次处理这种情况时可能会有点混乱 首先,你应该明白这
const test = Map({
arr: [{
id: 1
}, {
id: 2
}, {
id: 3
}]
})
这是
Map {
arr: [
{ id: 1 },
{ id: 2 },
{ id: 3 }
]
}
其中存储在arr
的值是一个数组,而不是一个不变的列表,并且存储在该数组中的值是对象而不是映射
要更改可变值,您需要同时更新映射和更改数组。请注意,您希望不可变地执行此操作,以便不更改存储在不可变映射中的可变值。这样做的不变方式如下所示
如果知道id为3的对象所在的索引,则可以将该索引切掉
const i = 2
test = test // remember that any change to an immutable object creates a new object, so assignment is required
.update('arr', (arr) => {
return arr.slice(0, i).concat(arr.slice(i + 1))
})
如果你不知道索引,那么你可以过滤数组
test = test // remember that any change to an immutable object creates a new object, so assignment is required
.update('arr', (arr) => {
return arr.filter((obj) => obj.id !== 3)
})
这种经历可能有点痛苦,所以我写这篇文章专门帮助处理混合嵌套数据结构。使用mudash可以实现与上面相同的效果
const _ = require('mudash')
// delete, this correctly traverses mixed structures...
test = _.delete(test, 'arr.2')
//update/filter, these methods correctly handle both immutable and stadard js types...
test = _.update(test, 'arr', (arr) => _.filter(arr, (obj) => obj.id !== 3))
这里的基本问题是,当您创建贴图时,它只是粗略地将对象关键点转换为贴图关键点。它不会深度转换对象。这是可以的,但是你必须正确处理这个案例,当你第一次处理这种情况时可能会有点混乱 首先,你应该明白这
const test = Map({
arr: [{
id: 1
}, {
id: 2
}, {
id: 3
}]
})
这是
Map {
arr: [
{ id: 1 },
{ id: 2 },
{ id: 3 }
]
}
其中存储在arr
的值是一个数组,而不是一个不变的列表,并且存储在该数组中的值是对象而不是映射
要更改可变值,您需要同时更新映射和更改数组。请注意,您希望不可变地执行此操作,以便不更改存储在不可变映射中的可变值。这样做的不变方式如下所示
如果知道id为3的对象所在的索引,则可以将该索引切掉
const i = 2
test = test // remember that any change to an immutable object creates a new object, so assignment is required
.update('arr', (arr) => {
return arr.slice(0, i).concat(arr.slice(i + 1))
})
如果你不知道索引,那么你可以过滤数组
test = test // remember that any change to an immutable object creates a new object, so assignment is required
.update('arr', (arr) => {
return arr.filter((obj) => obj.id !== 3)
})
这种经历可能有点痛苦,所以我写这篇文章专门帮助处理混合嵌套数据结构。使用mudash可以实现与上面相同的效果
const _ = require('mudash')
// delete, this correctly traverses mixed structures...
test = _.delete(test, 'arr.2')
//update/filter, these methods correctly handle both immutable and stadard js types...
test = _.update(test, 'arr', (arr) => _.filter(arr, (obj) => obj.id !== 3))
测试。删除(键)?请提供一个我无法理解的例子@WilomGfxtest.deleteIn(key)?请提供一个我无法理解的例子@WilomGfx