[英]array reduce accumulator as an empty array, push not working
为什么 accumulator.push 无效? 累加器是一个空数组?? 如果我使用预定义的变量flarArray
,一切正常,我知道如果 reduce 回调中没有包含初始值,那么它将使用数组中的第一项(在我的情况下将是一个对象)蓄能器? 但是如果我告诉它从作为累加器的数组开始,那有什么问题?
const profiles = [
{
id: 1,
userID: '1',
favoriteMovieID: '1',
},
{
id: 2,
userID: '2',
favoriteMovieID: '1',
}
];
const users = {
1: {
id: 1,
name: 'Jane Cruz',
userName: 'coder',
},
2: {
id: 2,
name: 'Matthew Johnson',
userName: 'mpage',
}
};
const movies = {
1: {
id: 1,
name: 'Planet Earth 1',
},
2: {
id: 2,
name: 'Selma',
}
};
let flatArray = [];
const flattenedProfiles = profiles.reduce(function(accumulator, currentProfile) {
return accumulator.push({id: currentProfile.id, name: users[currentProfile.id].name, favoriteMovie: movies[currentProfile.favoriteMovieID].name})
},[]);
Array.push
在reduce
回调的返回中返回数组的新长度,您正在返回无法执行下一次推送操作的新长度。 使用Array.concat
代替或在Array.push
之后也返回数组。
const flattenedProfilesPush = profiles.reduce((acc, curr) => {
acc.push({
id: curr.id,
})
return acc
},[])
const flattenedProfilesConcat = profiles.reduce((acc, curr) =>
acc.concat({
id: curr.id,
}),[]
)
您需要返回accumulator
,而不是返回push
function 的返回值,这是添加新项目后数组的大小。 在下一次迭代中,您将在 integer 上调用push
function
const flattenedProfiles = profiles.reduce((acc, curr) => {
acc.push({
id: curr.id,
name: users[curr.id].name,
favoriteMovie: movies[curr.favoriteMovieID].name
});
return acc;
},[]);
问题是你返回accumulator.push()
。 这将返回数组的长度,因此您的下一个累加器将是一个数字而不是一个数组。
我最好返回一个数组并在累加器上使用扩展运算符。
const profiles = [ { id: 1, userID: '1', favoriteMovieID: '1', }, { id: 2, userID: '2', favoriteMovieID: '1', } ]; const users = { 1: { id: 1, name: 'Jane Cruz', userName: 'coder', }, 2: { id: 2, name: 'Matthew Johnson', userName: 'mpage', } }; const movies = { 1: { id: 1, name: 'Planet Earth 1', }, 2: { id: 2, name: 'Selma', } }; let flatArray = []; const flattenedProfiles = profiles.reduce(function(accumulator, currentProfile) { return [...accumulator, {id: currentProfile.id, name: users[currentProfile.id].name, favoriteMovie: movies[currentProfile.favoriteMovieID].name}] },[]); console.log(flattenedProfiles);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.