我遇到了在Js中通过引用传递一个先前声明的对象
的问题 像那样parsed_data['nutrients_data'] = list[0].nutrients_data;
list是一个对象数组,我在列表上循环并进行一些计算,并将新值分配给数据为平均值,但没有从parseFloat获取返回值
console.log(parsed_data['nutrients_data'])
$.each(list, function(k, value) {
$.each(value.nutrients_data, function(key, value) {
var avg = //some calculations
var daily_value = //some calculations
parsed_data['nutrients_data.'+key+'.value'] = parseFloat(avg.toPrecision(3));
parsed_data['nutrients_data.'+key+'.daily_value'] = parseFloat(daily_value.toPrecision(3));
console.log(parseFloat(avg.toPrecision(3)))
console.log(parsed_data['nutrients_data.'+key+'.value'])
})
})
console.log(parsed_data['nutrients_data'])
日志显示该对象在循环之前和之后具有相同的值,因为Javascript通过引用传递它,所以它可以。
但它显示parseFloat返回了浮点数但不影响对象成员值
在循环之前记录其中一个对象成员:2.2680000000000002
log for parseFloat返回循环内部的值:2.27
循环后记录其中一个对象成员:2.2680000000000002
为什么对象成员值没有变为float?
答案 0 :(得分:0)
你在这做什么:
parsed_data['nutrients_data.'+key+'.value'] = ...
...正在写一个名为nutrients_data.somekey.value
的媒体资源。也就是说,属性名称实际上包含点。您在[]
中提供的整个字符串将用作属性名称,它不会按照代码的方式解析为组件部分。
我怀疑你想要这个:
parsed_data['nutrients_data'][key]['value'] = ...
...你可以更简单地写一下,像这样:
parsed_data.nutrients_data[key].value = ...