Lodash _.reduce问题?

时间:2017-01-04 19:36:17

标签: angularjs lodash

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

这里的第一行是普通的旧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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

使用_.reduce()代替_.forEach($scope.item, function(value, key) { $scope.keys.push(key); }); plunk):

f = open('myfile.xyz', "a+b")
f.seek(0, 0)
for l in f:
  l = "{}\n".format(l.rstrip()) # convert windows lines to posix, removing other terminal whitespace
  specific_condition = do_stuff(l) # returns True/False
  if specific_condition:
    p = f.tell()
    f.seek(0,os.SEEK_END)
    f.write(multiline_string)
    f.seek(p,os.SEEK_SET)
f.close()

答案 2 :(得分:0)

如果添加累加器,它将起作用。

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

答案 3 :(得分:0)

reduce函数用于将集合减少到单个值。每次通过它都会根据之前的值累积,因此你的第一个问题就出现了。换句话说,虽然你可以让它发挥作用(正如其他人所示),但它却是错误的工具。

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