JavaScript:无法获取对象的值

时间:2013-06-15 21:20:27

标签: javascript lodash

这是我的代码

var dataGroupByParentCategory = function(data){
 return _.groupBy(data, function(entry){
    return entry.category.parent;
  });
};


var parentCategorySum = function(data) {  

  var result = {};
  _.forEach(_.keys(this.dataGroupByParentCategory(data)), function(parentCategory){
     var that = this;
     console.log(parentCategory);
     var s = _.reduce(that.dataGroupByParentCategory[parentCategory], function(s, entry){
           console.log('>' + entry);  // Can not see entry here
           return s + parseFloat(entry.amount);
     }, 0);

     result[parentCategory] = s;
  });

  return result;
};

和数据看起来像

'data': [
        {
            'category': {
                'uri': '/categories/0b092e7c-4d2c-4eba-8c4e-80937c9e483d',
                'parent': 'Food',
                'name': 'Costco'
            },
            'amount': '15.0',
            'debit': true
        },
        {
            'category': {
                'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
                'parent': 'Food',
                'name': 'India Bazaar'
            },
            'amount': '10.0',
            'debit': true
        },
        {
            'category': {
                'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
                'parent': 'Food',
                'name': 'Sprouts'
            },
            'amount': '11.1',
            'debit': true
        }, ...

问题?

我看不到上面代码中的条目值

       console.log('>' + entry);  // Can not see entry here

我正在学习JavaScript并且不太了解范围的概念,这是否会导致问题?

2 个答案:

答案 0 :(得分:0)

您的dataGroupByParentCategory功能似乎是全局的,因此您无需使用thisthat来访问它。你似乎也在dataGroupByParentCategory[parentCategory]中输错了。必须是dataGroupByParentCategory(parentCategory)

答案 1 :(得分:0)

在用代码花了一些时间之后,我意识到我做错了,实际的代码现在是

var parentCategorySum = function(data) {

  var result = {};
  var dataGroupByParent = dataGroupByParentCategory(data);
  _.forEach(_.keys(dataGroupByParent), function(parentCategory){
     var s = _.reduce(dataGroupByParent[parentCategory], function(s, entry){
           return s + parseFloat(entry.amount);
     }, 0);
     result[parentCategory] = s;
  });

  return result;
};