簡體   English   中英

動態地從對象數組中提取鍵並將其轉換為對象數組

[英]Pull key from Array of Objects Dynamically And Transform to Array of Objects

我有一個特定的案例,我什至不知道是否有可能實現。

給定輸入數組。

var originalArr = [
  [
    { ID: 3, name: 'Beef' },
    { ID: 4, name: 'Macaroni' },
    { ID: 5, name: 'Sauce#1' }
  ],
  [{ ID: 1, name: 'Lettuce' }, { ID: 2, name: 'Brocoli' }]
];

我想遍歷內部數組並從對象中選擇ID,然后在數組的位置創建一個新的ID。 所以我的輸出應該像這樣。

var output = [
  {
    '1': {
      name: 'Lettuce',
      ID: 1
    },
    '2': {
      name: 'Brocoli',
      ID: 2
    }
  },
  {
    '3': {
      name: 'Beef',
      ID: 3
    },
    '4': {
      name: 'Macaroni',
      ID: 4
    },
    '5': {
      name: 'Sauce#1'
    }
  }
];

使用map遍歷內部數組很容易,但是如何代替數組創建新的Object並動態地調高其鍵值呢? 甚至有可能給定我的輸入以產生所需的輸出。

使用mapreduce

originalArr.map( s => //iterate outer array
    s.reduce( (acc, c) => (  //iterate inner array using reduce
       acc[c.ID] = c, acc  //assign the id as key to accumulator and return the accumulator
    ) , {}) //initialize accumulator to {}
)

演示版

 var originalArr = [ [ { ID: 3, name: 'Beef' }, { ID: 4, name: 'Macaroni' }, { ID: 5, name: 'Sauce#1' } ], [{ ID: 1, name: 'Lettuce' }, { ID: 2, name: 'Brocoli' }] ]; var output = originalArr.map( s => s.reduce( (acc, c) => ( acc[c.ID] = c, acc ) , {}) ); console.log(output); 

您可以使用純JavaScript實現遞歸

var originalArr = [
        [{
            ID: 3,
            name: 'Beef'
        }, {
            ID: 4,
            name: 'Macaroni'
        }, {
            ID: 5,
            name: 'Sauce#1'
        }],
        [{
            ID: 1,
            name: 'Lettuce'
        }, {
            ID: 2,
            name: 'Brocoli'
        }]
    ]

    function bindInObject(object, array) {
        for (var i = 0; i < array.length; i++) {
            var it = array[i];
            if (it instanceof Array) {
                bindInObject(object, it);
            } else {
                var id = it.ID;
                object[id] = it;
            }
        }
    }
    var output = {};

    bindInObject(output, originalArr);
    console.log(output) 
const original_array = [
[
    { ID: 3, name: 'Beef' },
    { ID: 4, name: 'Macaroni' },
    { ID: 5, name: 'Sauce#1' }
],
[
    { ID: 1, name: 'Lettuce' },
    { ID: 2, name: 'Brocoli' }
]
]

let new_array = []

for (let i=0; i < original_array.length; i++) {
    if (original_array[i + 1]) new_array = 
    new_array.concat(original_array[i].concat(original_array[i+1]))
}

let output = []

for (let i=0; i<new_array.length; i++) {
    output.push({[new_array[i].ID]: new_array[i]})
}

暫無
暫無

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

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