json - 无法将新键值添加到具有 JSON 对象的现有 JSON 数组中
问题描述
这是我尝试过的。我试过点符号和引号。它们似乎都不起作用。究竟可能是什么问题?
var clientsList;
Client.find({}, function(err, clients) {
clientsList = clients;
// I have 10 clients in the loop
for (var j = 0; j < clientsList.length; j++) {
var x = clientsList[j];
x.count = "20";
//x["count"] = "20";
console.log(x);
}
});
现有的客户对象
{"name":"abcd", "email":"abc@gmail.com"}
我无法将计数键值对添加到客户端对象中。可能是什么问题呢?
解决方案
我怀疑您所获得的对象Client.find
已阻止扩展(它已密封或冻结)。
您可以使用 ES2018 扩展符号创建一个具有原始对象自己的可枚举属性以及您的属性的新对象:count
x = {...x, count: "20"};
...或 ES2015 的Object.assign
:
x = Object.assign({}, x, {count: "20"});
如果数组也被密封或冻结,您可以像这样复制它及其对象:
clientList = clients.map(client => {
return {...client, count: "20"}; // Or with `Object.assign`
});
甚至使用箭头函数的简洁形式:
clientList = clients.map(client => ({...client, count: "20"}));
旁注:这种模式:
var clientsList;
Client.find({}, function(err, clients) {
clientsList = clients;
// ...
});
...通常建议您打算在调用clientsList
之后的代码中使用Client.find
并期望它具有该调用回调的结果。请参阅此问题的答案,了解为什么,如果您这样做,它不起作用。
推荐阅读
- maven - 在 jenkins 中运行所有 maven 测试用例
- android - 如何使用导航组件将数据从适配器类发送到片段
- python - 将字典从 csv 列读入数据框
- python - 如何使用 SQL 查询或 Python 转换作为多分类响应变量的字符串
- python - 为什么在排序值时会出现 SettinWithCopyError?
- sql - 如何在Oracle中将列列为行
- c++ - 链接器标志 -Wl,--exclude-libs,ALL 在所有情况下都不起作用
- timeout - Pentaho PDI 在 5 分钟后超时 JDBC 连接并出现 Java EOF 错误
- python - 如何根据另一列中的值检查 pandas df 列值是否存在?
- leaflet - 如何在传单中的多边形内获得一个圆圈