【问题标题】:Lodash _.reduce issue?Lodash _.reduce 问题?
【发布时间】:2017-01-04 19:36:17
【问题描述】:

我想知道是否有人可以告诉我我在这里做错了什么,我正在尝试使用 _.reduce 来获取对象中的字段,但似乎每次都缺少“第一个”字段。

这里的第一行是plain old js,接下来是lodash。

$scope.actualKeys = Object.keys($scope.item);
_.reduce($scope.item, function(result, value, key) {
  $scope.keys.push(key);
});

$scope.item 在哪里

$scope.item = {
field1: 'test',
field2: 'test',
field3: 'test',
field4: 'test',
field5: 'test',
field6: 'test'
};

https://plnkr.co/edit/J9MBahQNIsZkMFzrHjKG

【问题讨论】:

    标签: angularjs lodash


    【解决方案1】:

    如果它缺少第一个元素,我会冒险猜测,由于您没有设置初始累加器,它使用第一个元素作为初始累加器,然后在第二个元素上开始折叠。

    注意,我不知道 lodash;这只是标准的减少行为。查看文档以了解如何设置初始累加器。

    设置初始累加器通常是个好主意,除非您确定列表永远不会为空。如果不设置它,尝试减少空列表将抛出或返回 undefined(取决于 lodash 的行为)。如果不考虑这些故障,您可能会在路上得到惊喜。

    【讨论】:

      【解决方案2】:

      使用_.forEach() 代替_.reduce() (plunk):

      _.forEach($scope.item, function(value, key) {
        $scope.keys.push(key);
      });
      

      【讨论】:

        【解决方案3】:

        如果你添加一个累加器,它会起作用。

        $scope.actualKeys = Object.keys($scope.item);
        _.reduce($scope.item, function(result, value, key) {
            $scope.keys.push(key);
        }, 0);
        

        【讨论】:

          【解决方案4】:

          reduce 函数用于将集合缩减为单个值。每次通过它都会根据先前的值累积,因此您对第一个值的问题。换句话说,虽然你可以让它发挥作用(正如其他人所展示的那样),但它是适合这项工作的错误工具。

          在这种情况下,您需要的是一个简单的循环(或者,如您所知,Object.keys)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-15
            • 2022-07-22
            • 1970-01-01
            • 1970-01-01
            • 2017-11-05
            • 1970-01-01
            相关资源
            最近更新 更多