首页 > 解决方案 > 如何更改对象数组中的值

问题描述

我有这个对象数组:

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}并将其他对象保留原样。我究竟做错了什么?另外,我不想为此操作使用第三方库。

标签: javascript

解决方案


您的代码的一些评论:

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);


推荐阅读