在javascript中使用map向内部数组添加值

在javascript中使用map向内部数组添加值,javascript,arrays,object,Javascript,Arrays,Object,您好,假设我有以下数组: let array = [ { id: "1", name: "name", categories: [ { subid: "10", name: "name", }, { subid: "11", name: "name", } ] }, { id: "2", name: "name", c

您好,假设我有以下数组:

let array = [
  {
    id: "1",
    name: "name",
    categories: [
      {
        subid: "10",
        name: "name",
      },
      {
        subid: "11",
        name: "name",
      }
    ]
  },
  {
    id: "2",
    name: "name",
    categories: [
      {
        subid: "20",
        name: "name",
      },
      {
        subid: "21",
        name: "name",
      }
    ]
  }
]
我的目标是获取每个对象的
id
,并将其添加到内部数组
类别中。所以看起来是这样的:

let array = [
  {
    id: "1",
    name: "name",
    categories: [
      {
        subid: "10",
        name: "name",
        id: "1"
      },
      {
        subid: "11",
        name: "name",
        id: "1"
      }
    ]
  },
  {
    id: "2",
    name: "name",
    categories: [
      {
        subid: "20",
        name: "name",
        id: "2"
      },
      {
        subid: "21",
        name: "name",
        id: "2"
      }
    ]
  }
]
以下是我到目前为止的情况:

array.map(x => (x.id)) // returns new array of ids
// add these into the categories

有人能用
map
帮我解决这个问题吗?如果
map
不能使用,我认为
对于每一个
都同样适用使用
map
方法,并在对象内部传播语法,您可以做到这一点

let array=[{“id”:“1”,“name”:“name”,“categories”:[{“subid”:“10”,“name”:“name”},{“subid”:“11”,“name”:“name”},{“id”:“2”,“name”:“name”,“categories”:[{“subid”:“20”,“name”:“name”},{“subid”:“21”,“name”:“name”}]
让result=array.map({id,categories,…rest})=>({
…rest,id,categories:categories.map((o)=>({…o,id}))
}))

console.log(result)
您可以使用
Array.forEach()
迭代数组,然后在categories数组上使用
Array.map()
将id属性添加到其所有对象:

let array=[{id:“1”,name:“name”,categories:[{subid:“10”,name:“name”,},{subid:“11”,name:“name”,}],{id:“2”,name:“name”,categories:[{subid:“20”,name:“name”,},{subid:“21”,name:“name”,}];
array.forEach((o)=>{
o、 categories=o.categories.map(cat=>Object.assign({},cat,{id:o.id}));
});

console.log(数组)您需要映射所有具有复制属性的数组,以获取具有新属性的新独立数据

let array=[{id:“1”,name:“name”,categories:[{subid:“10”,name:“name”,},{subid:“11”,name:“name”,}],{id:“2”,name:“name”,categories:[{subid:“20”,name:“name”,},{subid:“21”,name:“name”,}],
updated=array.map(o=>Object.assign(
{},
啊,,
{categories:o.categories.map(p=>Object.assign({},p,{id:o.id}))}
));
控制台日志(更新);
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
使用每个Jquery应该完成这项工作。 $.each(数组、函数(索引、项){item.categories.id=item.id;}); 谢谢

嵌套映射呢

让arr=[
{
id:“1”,
姓名:“姓名”,
类别:[
{
subid:“10”,
姓名:“姓名”,
},
{
subid:“11”,
姓名:“姓名”,
}
]
},
{
id:“2”,
姓名:“姓名”,
类别:[
{
subid:“20”,
姓名:“姓名”,
},
{
subid:“21”,
姓名:“姓名”,
}
]
}
]
arr.map(x=>{
x、 categories.map(y=>{
y、 id=x.id
})
})

console.log(arr)
您想改变原始数据还是获得独立的新对象?我想从原始数据中获得一个新数组,这是一种比其他(Nenad)答案更干净的方法。但是OP只是评论说他想要从数据中得到一个新的对象。也许你可以相应地修改它。@KarelG谢谢:-)是的!这就是我要找的。非常感谢。这将修改原始数组。