Javascript 无法在数组中推送对象
我尝试迭代两个对象数组,并尝试将组合对象推送到一个新数组中。我有两个数组,allData和users。我迭代这些数组,如果来自allData的author与用户数组的id匹配,那么我将数据推送到newData数组中 但我无法在插入新数据数组时访问imageURL。有人能指出为什么会发生这种情况,解决办法是什么吗Javascript 无法在数组中推送对象,javascript,arrays,Javascript,Arrays,我尝试迭代两个对象数组,并尝试将组合对象推送到一个新数组中。我有两个数组,allData和users。我迭代这些数组,如果来自allData的author与用户数组的id匹配,那么我将数据推送到newData数组中 但我无法在插入新数据数组时访问imageURL。有人能指出为什么会发生这种情况,解决办法是什么吗 let allData = [{ "id": 5, "message": "bnnnbnb", "parentId": 1, "author": 2 }]
let allData = [{
"id": 5,
"message": "bnnnbnb",
"parentId": 1,
"author": 2
}];
let users = [{
"id": 1,
"name": "abc",
"imageUrl": "avatar1.jpg"
}, {
"id": 2,
"name": "def",
"imageUrl": "avatar2.jpg"
}, {
"id": 3,
"name": "qwe",
"imageUrl": "avatar3.jpg"
}];
let newData = [];
allData.map((dataItem) => {
users.map((user) => {
if(dataItem.author === user.id){
newData.push({...dataItem, user.imageUrl})
}
})
})
我期待以下结果:
let newData = [{
"id": 5,
"message": "bnnnbnb",
"parentId": 1,
"author": 2,
"imageUrl": "avatar2.jpg"
}];
您应该改用newData.push{…dataItem,imageUrl:user.imageUrl}
您需要在正在推送的新对象中定义属性imageUrl的名称。您应该使用newData.push{…dataItem,imageUrl:user.imageUrl}
您需要在要推送的新对象中定义属性imageUrl的名称。您需要在映射中定义属性imageUrl,然后推送到数组中 让所有数据=[{ id:5, 留言:bnnbnb,, 父ID:1, 作者:2 }]; 让用户=[{ id:1, 姓名:abc, imageUrl:avatar1.jpg }, { id:2, 姓名:def,, imageUrl:avatar2.jpg }, { id:3, 姓名:qwe,, imageUrl:avatar3.jpg }]; 设newData=[]; allData.mapdataItem=>{ users.mapuser=>{ ifdataItem.author==user.id{ dataItem.imageUrl=user.imageUrl; newData.pushdataItem; } } }
console.lognewData 您需要在映射中定义属性imageUrl,然后将其推入数组 让所有数据=[{ id:5, 留言:bnnbnb,, 父ID:1, 作者:2 }]; 让用户=[{ id:1, 姓名:abc, imageUrl:avatar1.jpg }, { id:2, 姓名:def,, imageUrl:avatar2.jpg }, { id:3, 姓名:qwe,, imageUrl:avatar3.jpg }]; 设newData=[]; allData.mapdataItem=>{ users.mapuser=>{ ifdataItem.author==user.id{ dataItem.imageUrl=user.imageUrl; newData.pushdataItem; } } }
console.lognewData 你真的很接近,你会想要这样的东西:
let newData = [];
allData.map(dataItem => {
users.map(user => {
if(dataItem.author === user.id){
let imageUrl = user.imageUrl; // define the name of the property
newData.push({...dataItem, imageUrl})
}
})
})
因此json输出如下所示:
[
{
"id": 5,
"message": "bnnnbnb",
"parentId": 1,
"author": 2,
"imageUrl": "avatar2.jpg"
}
]
const newData = allData.map((dataItem) =>
({
...dataItem,
imageUrl: (users.find(user => dataItem.author === user.id)||{}).imageUrl
}))
你真的很接近,你会想要这样的东西:
let newData = [];
allData.map(dataItem => {
users.map(user => {
if(dataItem.author === user.id){
let imageUrl = user.imageUrl; // define the name of the property
newData.push({...dataItem, imageUrl})
}
})
})
因此json输出如下所示:
[
{
"id": 5,
"message": "bnnnbnb",
"parentId": 1,
"author": 2,
"imageUrl": "avatar2.jpg"
}
]
const newData = allData.map((dataItem) =>
({
...dataItem,
imageUrl: (users.find(user => dataItem.author === user.id)||{}).imageUrl
}))
这将解决问题。代码中缺少名称定义
这将解决问题。您的代码中缺少名称定义如果您使用类似以下内容的查找,效果会更好:
[
{
"id": 5,
"message": "bnnnbnb",
"parentId": 1,
"author": 2,
"imageUrl": "avatar2.jpg"
}
]
const newData = allData.map((dataItem) =>
({
...dataItem,
imageUrl: (users.find(user => dataItem.author === user.id)||{}).imageUrl
}))
如果您使用以下方式查找,效果会更好:
[
{
"id": 5,
"message": "bnnnbnb",
"parentId": 1,
"author": 2,
"imageUrl": "avatar2.jpg"
}
]
const newData = allData.map((dataItem) =>
({
...dataItem,
imageUrl: (users.find(user => dataItem.author === user.id)||{}).imageUrl
}))
使用Map映射对象数组,然后使用find匹配id,然后将匹配的记录推送到结果数组 让所有数据=[ { id:5, 留言:bnnbnb,, 父ID:1, 作者:2 } ]; 让用户=[ { id:1, 姓名:abc, imageUrl:avatar1.jpg }, { id:2, 姓名:def,, imageUrl:avatar2.jpg }, { id:3, 姓名:qwe,, imageUrl:avatar3.jpg } ]; 设newData=[]; 让output=allData.mapdataItem,i=>{ 让temp=users.finduser=>dataItem.author==user.id; push{…dataItem,imageUrl:temp.imageUrl}; 返回新数据; };
console.lognewData 使用Map映射对象数组,然后使用find匹配id,然后将匹配的记录推送到结果数组 让所有数据=[ { id:5, 留言:bnnbnb,, 父ID:1, 作者:2 } ]; 让用户=[ { id:1, 姓名:abc, imageUrl:avatar1.jpg }, { id:2, 姓名:def,, imageUrl:avatar2.jpg }, { id:3, 姓名:qwe,, imageUrl:avatar3.jpg } ]; 设newData=[]; 让output=allData.mapdataItem,i=>{ 让temp=users.finduser=>dataItem.author==user.id; push{…dataItem,imageUrl:temp.imageUrl}; 返回新数据; };
console.lognewData;首先检查JS错误控制台…?Chrome至少给了我一个语法错误,请检查JS错误控制台…?Chrome至少给了我一个语法错误。