簡體   English   中英

將對象數組轉換為單個對象

[英]Converting array of objects into a single object

這是我的初始數組:

[ 
   { 
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
   },
  { 
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  } 
]

我想要的輸出:

{
   pos123: {
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
  },
  tailor123: {
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  },
}

我嘗試使用map進行此操作,但無法弄清楚。 我應該在這里使用reduce嗎?

您的輸出不是數組,而是一個對象,因此必須使用reduce 您只能使用map將一個數組中X個項目轉換為另一個數組中X個項目。

 const input=[{id:1,name:'pos',code:'pos123',appCode:22,},{id:2,name:'tailor',code:'tailor123',appCode:21,}] const output = input.reduce((a, obj) => { a[obj.code] = obj; return a; }, {}); console.log(output); 

您可以使用Object.assign將數組映射到鍵和值的預期形狀。 嘗試:

 let array = [ { id: 1, name: 'pos', code: 'pos123', appCode: 22, }, { id: 2, name: 'tailor', code: 'tailor123', appCode: 21, } ]; let output = Object.assign(...array.map(x => ({ [x.code]: x }))); console.log(output); 

var yourArray = [ 
 { 
  id: 1,
  name: 'pos',
  code: 'pos123',
  appCode: 22,
  },
 {  
  id: 2,
  name: 'tailor',
  code: 'tailor123',
  appCode: 21,
 } 
];

//this is what you required
var output =  yourArray.reduce((obj, item) => {
  obj[code] =item;
  return obj;
}, {});

使用數組歸約功能

 var data = [{ id: 1, name: 'pos', code: 'pos123', appCode: 22, }, { id: 2, name: 'tailor', code: 'tailor123', appCode: 21, } ] var modData = data.reduce(function(acc, curr) { //acc is the empty array passed as argument // if empty array does not have a property pos123 or so // create a key by this name if (!acc.hasOwnProperty(curr.code)) { // then add property to it acc[curr.code] = { id: curr.id, name: curr.name, appCode: curr.appCode } } return acc; }, {}) console.log(modData) 

使用循環可以做到這一點。

 const resp = [ { id: 1, name: 'pos', code: 'pos123', appCode: 22, }, { id: 2, name: 'tailor', code: 'tailor123', appCode: 21, } ] let res = {}; for (let i = 0; i < resp.length; i++) { res[resp[i]['code']] = { id: resp[i]['id'], name: resp[i]['name'], appCode: resp[i]['appCode'], code: resp[i]['code'] } } console.log(res); 

似乎其他解決方案在結果對象中包括“代碼”屬性。 這個不

 const test = [ { id: 1, name: 'pos', code: 'pos123', appCode: 22, }, { id: 2, name: 'tailor', code: 'tailor123', appCode: 21, } ]; const test2 = JSON.parse(JSON.stringify(test)); const result = document.querySelector("#result"); result.textContent = "**No redundancy\\n" + JSON.stringify( test.reduce( (newObj, el) => (newObj[el.code] = delete el.code && el) && newObj, {} ), null, " "); // alternative result.textContent += "\\n\\n**Alternative\\n" + JSON.stringify( test2.reduce( (newObj, el) => (newObj[el.code] = el) && newObj, {} ), null, " "); 
 <pre id="result"></pre> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM