我想知道是否有人能告诉我这里我做错了什么,我正在尝试使用_.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'
};
答案 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
)。