[英]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.