我在JSON中有一个对象数组,并且想要更改一个值的属性。例如 假设我有一个关键字段是唯一的,并且amount
,name
道具。 我的方法是在findIndex
或map中找到列表中的对象,然后将其删除并创建一个新对象并将其推送到该对象。这是好方法吗? 可以推荐更好的方法或功能?在ramda.js中更改对象列表中的道具
0
A
回答
2
Lenses
可能是解决这个问题的正规途径,虽然Ramda有很多替代品。
const people = [
{id: 1, name: 'fred', age: 28},
{id: 2, name: 'wilma', age: 25},
{id: 3, name: 'barney', age: 27},
{id: 4, name: 'betty', age: 29},
]
const personIdx = name => findIndex(propEq('name', name), people)
const ageLens = idx => lensPath([idx, 'age'])
const wLens = ageLens(personIdx('wilma'))
const newPeople = over(wLens, age => age + 1, people)
//=> [
// {id: 1, name: 'fred', age: 28},
// {id: 2, name: 'wilma', age: 26},
// {id: 3, name: 'barney', age: 27},
// {id: 4, name: 'betty', age: 29},
// ]
注意,虽然newPeople
是一个全新的对象,它的股票一样,因为它可以与现有people
。例如,newPeople[3] === people[3] //=> true
。
还要注意,以及调整使用over
这支镜头的参数,我们可以简单地使用view
获取值:
view(wLens, people) //=> 25
或者,我们可以将其与set
设置为一个固定值:
set(wLens, 42, people) //=> new version of `people` with wilma's age at 42
最后,请注意镜头组成。我们也可以这样写:
const ageLens = idx => compose(lensIndex(idx), lensProp('age')).
镜头组成可以非常强大。
您可以在Rand REPL上看到此操作。
1
也许这样的事情?
var org =
[
{name:"one",age:1}
,{name:"two",age:2}
]
;
var newArray =
org
.map(
(x,index)=>
index === 1
?Object.assign(
{}
,x
,{name:"new name"}
)
:x
)
;
相关问题
- 1. C#更改列表中的对象
- 2. 更改对象列表中的行吗?
- 3. 更改列表对象中的值
- 4. 列表中的多个ggplot对象在循环中被更改
- 5. 在列表中更改符合特定条件的对象
- 6. 阵列中的对象更改检测
- 7. 更改日期到列表中的所有对象,并更新
- 8. 将对象存储在列表中,然后对对象进行更改
- 9. 对象在Python中更改
- 10. 在NSMutableArray中更改对象
- 11. 更改列表数组中表单对象的位置值
- 12. 选择阵列对象的道具
- 13. 组件道具嵌套的对象不会更新DOM改变
- 14. 如何在Python中查找对象列表时更改属性
- 15. Gridview具有更多对象的对象列表?
- 16. 在对象列表中的位置列表修改
- 17. 更新列表中的对象的值
- 18. JavaSE在列表中添加对象但为了更改对象为什么?
- 19. 在对象列表中,如何在javascript函数中合并一些对象道具?
- 20. 更改道具值
- 21. 具有对象列表的对象列表对象列表Linq to Entities
- 22. 更改对象中的值
- 23. Java - 如果我更改列表中的项目,列表中的对象是否也会更改?
- 24. Filter对象道具
- 25. 列表中的C#更新对象
- 26. 用ramda.js过滤对象数组
- 27. 将对象绑定到组合框填充列表,但选择更改未在CSharp中的对象中更新
- 28. 比较2个对象列表,并在新列表中返回更改
- 29. 如何从数组列表中更改对象的属性?
- 30. 通知更改列表中的对象属性
你为什么要删除对象然后再添加它?只需更改对象? –
@AnteJablanAdamović:函数式编程的一个主要主题是避免变异数据。 –