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

时间:2018-09-28 08:02:38

标签: javascript arrays object

你好,我有以下数组:

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并将其添加到内部数组categories中。所以看起来像这样:

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,我认为for each也可以使用

5 个答案:

答案 0 :(得分:2)

使用public void setProgressText(final String progressText){ Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { // Any UI task, example progressDialog.setMessage(progressText); } }; handler.sendEmptyMessage(1); } 方法并在对象内部传播语法,您可以做到这一点。

map

答案 1 :(得分:2)

您可以使用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(array);

答案 2 :(得分:1)

您需要映射所有具有复制属性的数组,以获取具有新属性的新独立数据。

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(
        {},
        o,
        { categories: o.categories.map(p => Object.assign({}, p, { id: o.id })) }
    ));

console.log(updated);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:1)

使用每个Jquery都可以完成这项工作。 $ .each(array,function(index,item){item.categories.id = item.id;}); 谢谢。

答案 4 :(得分:1)

嵌套地图怎么样?

let arr = [
  {
    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",
      }
    ]
  }
]

arr.map(x=>{
    x.categories.map(y => { 
        y.id = x.id
    })
})

console.log(arr)