无法将新键值添加到带有JSON对象的现有JSON数组中

时间:2018-09-13 07:37:17

标签: json node.js

这是我尝试过的。 我尝试了点符号和引号。他们似乎都不起作用。到底是什么问题?

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"}

我无法将 count 键值对添加到客户端对象中。可能是什么问题?

1 个答案:

答案 0 :(得分:0)

我怀疑Client.find为您提供的对象具有扩展名(它是sealedfrozen)。

您可以使用ES2018传播符号使用原始的自己的可枚举属性以及您的count属性创建一个 new 对象:

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,并希望它具有该调用的回调的结果。请参阅this question's answers,了解为什么这样做不起作用。