我有一个函数,它接受一个狗对象数组,并返回所有主人的名字数组。
dogs = [
{name: 'Archie', breed: 'Lurcher', owner: 'Jack'},
{name: 'Charlie', breed: 'Pug', owner: 'John'},
{name: 'Buddy', breed: 'Pug', owner: 'Mike'}
]
我通过链式使用filter和map方法得到了结果,但这意味着我要对相同的列表进行两次循环遍历。我知道可以使用Reduce方法来完成这个任务,但不确定该如何做。在使用Reduce时大多数例子似乎都是针对数字,这让我在处理自己的问题时有些困惑。
如果有任何帮助,将不胜感激。谢谢。
function getOwners(dogs) {
return dogs.filter(dog => dog.breed === 'Pug').map(dog => dog.owner);
}
returns ['John', 'Mike']
concat
而不是展开操作符可以提高效率:total.concat(current.owner) : total
。 - Jack Bashfordacc
变成数字数组,例如reduce((total: number[], line: string, i: number)
时,我会得到错误信息:Argument of type '(total: number[], line: string, i: number) => number[]' is not assignable to parameter of type '(previousValue: string, currentValue: string, currentIndex: number, array: string[]) => string'.
我可以得到正确的输出结果,但是这个错误会停止执行。 - Mote Zart