簡體   English   中英

React - 如何將嵌套的 object 轉換為數組

[英]React - How to convert a nested object into a array

我有以下 object,我想將其轉換為 object 的數組,並且數組中的每個 object 都有鍵:value[0]。

object:

const obj = {
   comedy: ['book1', 'book2'],
   action: ['book3', 'book4'],
   drama: ['book5'],
}

output

const arr = [
{comedy: 'book1'},
{comedy: 'book2'},
{action: 'book3'},
{action: 'book4'},
{drama: 'book5'},
]

到目前為止,我已經嘗試通過循環和使用Object.entries來解決這個問題。 但我沒有得到我需要的 output。

let result = [];

for(const [key1, value1] of Object.entries(arr)) {
  for (const [key2, value2] of Object.entries(value1)) {
    if(result[key2]) {
      result[key2] [key1] = value2
    } else {
      result[key2] = {[key1]: value2}
    }
  }
}

console.log(result)

我還嘗試循環調用 function 內部。 (我找到了這個尋找答案的方法)。 但它會陷入無限循環。

const result = [];

const getArray = (obj) => {
  if (!obj) return;

  const {keys, ...rest} = obj;
  result.push({...rest});
  getArray(keys);
}

console.log('here', getArray(arr));

 const obj = { comedy: ['book1', 'book2'], action: ['book3', 'book4'], drama: ['book5'], } const result = Object.keys(obj).reduce((acc, key) => [...acc, ...obj[key].map((value) => ({[key]: value}))], [] ) console.log(result)

嘗試這個


function nestedObjectIntoArray(obj) {
  const arr = [];
  for (const key in obj) {
    for (const value of obj[key]) {
      const obj = {};
      obj[key] = value;
      arr.push(obj);
    }
  }
  return arr;
}

const obj = {
  comedy: ["book1", "book2"],
  action: ["book3", "book4"],
  drama: ["book5"],
};

console.log(nestedObjectIntoArray(obj));

您可以對obj的條目使用 reduce,為數組值中的每個條目將對象添加到累加器:

 const obj = { comedy: ['book1', 'book2'], action: ['book3', 'book4'], drama: ['book5'], } const arr = Object.entries(obj).reduce((acc, [k, v]) => acc.concat(v.map(b => ({ [k]: b }))), [] ) console.log(arr)

 const obj = { comedy: ['book1', 'book2'], action: ['book3', 'book4'], drama: ['book5'], } let result = Object.entries(obj).flatMap(([k,v]) => v.map(n => ({[k]:n})) ) console.log(result)

我們也可以通過使用Array.forEach()方法來實現這一點。

現場演示

 // Input object const obj = { comedy: ['book1', 'book2'], action: ['book3', 'book4'], drama: ['book5'], }; // Declare a variable to store the final result. const arr = []; // Iterate the input object based on the keys and build the final object. Object.keys(obj).forEach(key => { obj[key].forEach(item => { arr.push({ [key]: item }) }) }); // Result console.log(arr);

暫無
暫無

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

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