Javascript在循环时为先前初始化的对象成员分配新值

时间:2014-03-27 09:30:58

标签: javascript

我遇到了在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?

1 个答案:

答案 0 :(得分:0)

你在这做什么:

parsed_data['nutrients_data.'+key+'.value'] = ...

...正在写一个名为nutrients_data.somekey.value的媒体资源。也就是说,属性名称实际上包含点。您在[]中提供的整个字符串将用作属性名称,它不会按照代码的方式解析为组件部分。

我怀疑你想要这个:

parsed_data['nutrients_data'][key]['value'] = ...

...你可以更简单地写一下,像这样:

parsed_data.nutrients_data[key].value = ...