簡體   English   中英

如何在 JavaScript 中更改對象鍵值對的位置

[英]How to change the location of an object key value pair in JavaScript

我見過類似的問題,但使用不同的語言,我正在努力創建一個 JavaScript 等價物。

我正在接收一個對象,並通過一個函數我想更改一個(或多個)屬性的位置。 例如,

與原始對象

{
  individual: [
    {
      dob: '2017-01-01',
      isAuthorized: true,
    },
  ],
  business: [
    {
     taxId: '123',
    },
  ],
  product: {
    code: '123',
  },
}

我想將isAuthorized的位置更改為business數組內的第一個對象而不是individual

像這樣

{
  individual: [
    {
      dob: '2017-01-01',
    },
  ],
  business: [
    {
     taxId: '123',
     isAuthorized: true,
    },
  ],
  product: {
    code: '123',
  },
}

到目前為止,我正在嘗試創建一個包含鍵名和位置的對象以將其更改為,例如

{
  isAuthorized: obj.business[0]
}

然后循環遍歷原始對象以及具有位置值的對象,然后設置該鍵值對的位置。

基本上,在此函數中,我想查看原始對象是否包含某個值(在本例中為isAuthorized ),它將獲取該鍵值對並將其移動到所需位置。

使用 loadsh 可以輕松實現您想要的,這里是如何根據定義的結構圖進行重組的工作片段。 擴展此示例以匹配您想要的內容。

該示例正在進行深度克隆,如果您可以很好地修改原始對象,則跳過該步驟以避免開銷。

 // input data const data = { individual: [ { dob: '2017-01-01', isAuthorized: true, }, ], business: [ { taxId: '123', }, ], product: { code: '123', }, }; // the structure change map const keyMap = { 'individual[0].isAuthorized': 'business[0].isAuthorized' }; function parseData(data,keyMap) { const newData = _.cloneDeep(data); for( let [source,dest] of Object.entries(keyMap) ) { _.set(newData,dest,_.get(newData,source)); _.unset(newData,source); } return newData; } console.log(parseData(data, keyMap));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

注意:loadsh 的集合將任何數值視為數組索引,因此如果您使用的是數字對象鍵,則使用 loadash.setWith。 我建議閱讀文檔中的示例以更好地理解。 https://lodash.com/docs/4.17.15#set

暫無
暫無

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

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