Javascript 无法在数组中推送对象

Javascript 无法在数组中推送对象,javascript,arrays,Javascript,Arrays,我尝试迭代两个对象数组,并尝试将组合对象推送到一个新数组中。我有两个数组,allData和users。我迭代这些数组,如果来自allData的author与用户数组的id匹配,那么我将数据推送到newData数组中 但我无法在插入新数据数组时访问imageURL。有人能指出为什么会发生这种情况,解决办法是什么吗 let allData = [{ "id": 5, "message": "bnnnbnb", "parentId": 1, "author": 2 }]

我尝试迭代两个对象数组,并尝试将组合对象推送到一个新数组中。我有两个数组,allData和users。我迭代这些数组,如果来自allData的author与用户数组的id匹配,那么我将数据推送到newData数组中

但我无法在插入新数据数组时访问imageURL。有人能指出为什么会发生这种情况,解决办法是什么吗

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至少给了我一个语法错误。