已解决,此代码所存在的函数被更频繁地调用然后被预期,因此可能未定义值,因此嵌套对象文字的添加值将不起作用。我的解决方案是检查response.times is defined
是否仅在这种情况下添加值。
我正在尝试将键值对添加到javascript对象中的对象时遇到一些麻烦。
我主要查看以下主题中的解决方案,因为我找不到更接近我问题的内容。
How can I add a key/value pair to a JavaScript object?
我遇到的情况是我得到一个返回的对象或执行时间,我用它来确定我的应用程序变慢的位置(服务器,数据库,查询等)。但是,所有这些时间都存在于从服务器传递的响应对象中。
为了改变这一点,我在响应中为所有这些时间做了一个特定的对象。问题是我仍然将所有这些时间戳添加到主响应对象,然后再将它们更改为此对象。
response.times = {
'executionTime': response.executionTime,
'processingTime': response.processingTime,
}
我希望能够在知道这些对象后立即将所有这些时间戳添加到该对象中。
可以通过多种方式将值添加到响应对象:
response.executionTime = 'x';
response['executionTime'] = 'x';
Object.assign(response, {executionTime: 'x'});
response.push({executionTime: 'x'});
但是这些方法都没有在我尝试做这样的事情的情况下工作,我在这些代码中得到的错误是Cannot read property ... of undefined
。在所有情况下,即使设置了值,时间似乎也未定义。
response.times.executionTime = 'x';
response.times['executionTime'] = 'x';
Object.assign(response.times, {executionTime: 'x'});
Object.assign(response['times]', {executionTime: 'x'});
response.times.push({executionTime: 'x'});
response['times'].push({executionTime: 'x'});
有没有正确的方法来完成这项工作?
答案 0 :(得分:0)
确保响应和 response.times 是对象或空对象,而不是 null , undefined ,.. 。:
var response;
response = response || {};
response.times = response.times || {};
response.times.executionTime = 'x';
console.log(response);
答案 1 :(得分:0)
这里你的代码有效(我删除了.push()
个,因为它们用于数组)。您只需在添加属性之前定义response
对象和response.times
对象。
response = {
times: {}
};
response.times.executionTime1 = 'x';
response.times['executionTime2'] = 'x';
Object.assign(response.times, {
executionTime3: 'x'
});
Object.assign(response['times'], {
executionTime4: 'x'
});
console.log(response);