javascript - 如何更改对象数组中的值
问题描述
我有这个对象数组:
const indexStates = [ {"4": true}, {"3": false}, {"7": false}, {"1": true} ];
并试图弄清楚如何更改这个原始数组中给定对象的值(不想制作数组的副本)。我试过这个
index = 4;
indexStates.filter(o => o[index] = !o[index]);
console.log(indexStates);
但结果是
[{"4": false}, {"3": false, "4": true}, {"4": true, "7": false}, {"1": true, "4": true}]
而不是仅更改值{"4": false}
并将其他对象保留原样。我究竟做错了什么?另外,我不想为此操作使用第三方库。
解决方案
您的代码的一些评论:
index = 4;
indexStates.filter(o => o[index] = !o[index]);
这个“索引”应该是一个属性名称,而不是数组中的位置,并且o[index] = !o[index]
它是一个赋值,而不是一个谓词
相反,试试这个
var indexStates = [ {"4": true}, {"3": false}, {"7": false}, {"1": true} ];
var index = 4;
var toChange = indexStates.filter(o => Object.getOwnPropertyNames(o).filter(n => n == index)[0] !== undefined)[0];
toChange[index] = !toChange[index]
console.log(toChange);
console.log(indexStates);
推荐阅读
- ios - 带有 CloudKit 的 CoreData:记录类型未显示在仪表板中
- windows - ClusteredScheduledTask 中的更改触发器
- python - 从官方街机站点复制此代码,但我收到此错误: AttributeError: module 'arcade' has no attribute 'Scene'
- flutter - 颤振绘制clipPath
- sql - 如何使用当前行值为 column2 的所有行中的 column1 中的所有值的列表填充 PostgresQL 列
- aws-load-balancer - 可以在 Orocomerce 使用负载均衡器和 SSL 吗?
- django - 实现第一个序列化程序的 AttributeError:“QuerySet”对象没有属性“名称”
- javascript - 如何通过 ScriptManager.RegisterStartupScript 将特殊字符从 C# 传递到 JavaScript
- ios - 本地化并不总是适用于某些文本
- java - 通过单元测试测试服务方法?