iT邦幫忙

1

js 陣列替換 key

如題,有一個長得像

const words = [{mediaType:[{name: "a", y: 1},{name: "b", y: 2}]},{mediaType:[{name: "c", y: 14},{name: "d", y: 72}]}];

這樣結構的陣列

我想要把 mediaType 替換成

const name =['data1','data2']

也就是會變成

const words = [{data1:[{name: "a", y: 1},{name: "b", y: 2}]},{data2:[{name: "c", y: 14},{name: "d", y: 72}]}];

請問該怎麼做,我卡了一個下午了救救我嗚嗚嗚

1 個回答

2
Han
iT邦新手 3 級 ‧ 2020-11-09 19:32:51
最佳解答
const words = [
  {
    mediaType: [
      { name: "a", y: 1 },
      { name: "b", y: 2 },
    ],
  },
  {
    mediaType: [
      { name: "c", y: 14 },
      { name: "d", y: 72 },
    ],
  },
];
const newWords = words.map((word, index) => ({
  [`data${index + 1}`]: word.mediaType,
}));

Note:此方法只能創新陣列哦,不然就是要把原本的words陣列遍歷,但會比較麻煩,如果堅持要同一個變數,請參考以下

words.forEach((word, index) => {
  words[index] = { [`data${index + 1}`]: word.mediaType };
});

我是要用物件新增元件 還是轉成 json 在處理會比較好

const objWords = {};

words.forEach((word, index) => {
  objWords[`data${index + 1}`] = word.mediaType;
});

那就確定一定要用新的變數哦,原本 words 已經定義成陣列了,再怎麼魔改都不可能變物件

看更多先前的回應...收起先前的回應...
Han iT邦新手 3 級 ‧ 2020-11-09 19:34:20 檢舉

應該還有很多方法,純舉出馬上想的到的做法!

Chris iT邦新手 5 級 ‧ 2020-11-09 21:42:30 檢舉

有喔~ 我有用出來 不過可以弄成像

{a:[...],b:[...]}

這樣的嗎

我是要用物件新增元件 還是轉成 json 在處理會比較好

Han iT邦新手 3 級 ‧ 2020-11-09 22:19:47 檢舉

已更新內文哦

Chris iT邦新手 5 級 ‧ 2020-11-09 22:48:56 檢舉

有喔 我成功了 原本還想試 Object.entries哈哈
感謝你~

我要發表回答

立即登入回答