簡體   English   中英

如何將 arrays 的數組轉換為嵌套的對象數組

[英]How to transform array of arrays into nested array of objects

我有一個 arrays 數組:

const data = [
  ["10:00", "12:00", "13:00", "14:30"],
  ["10:00", "12:00", "13:00", "14:30"],
  ["10:00", "12:00", "13:00", "14:30"],
  ["10:00", "12:00", "13:00", "14:30"],
  ["10:00", "12:00", "13:00", "14:30"],
  ["10:00", "12:00", "13:00", "14:30"],
  ["10:00", "12:00", "13:00", "14:30"]
];

這是所需的output

const output = [
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ],
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ],
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ],
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ],
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ],
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ],
  [
    {
      startTime: "10:00",
      endTime: "12:00"
    },
    {
      startTime: "12:00",
      endTime: "13:00"
    },
    {
      startTime: "13:00",
      endTime: "14:30"
    }
  ]
];

目前,我無法了解如何實現嵌套結構。 到目前為止,這是我為獲得所需的output的嘗試:

const transformData = () => {
  return data.map((item, index) => {
    return {
      startTime: item[index],
      endTime: item[index + 1]
    }
  });
};

您錯過了一個事實,即您不應該用所需的結果覆蓋現有數組data ,因為您需要從頭到尾對其進行迭代,包括遍歷每個子數組。 所需的output需要改為陣列。

data object 傳遞到您的transformData中,並讓 function 使用您想要的output創建一個數據結構。 我還修改了通過模數數學獲取startDateendDate的內部邏輯......就像這樣:

 const data = [ ["01:00", "02:00", "03:00", "04:00"], ["01:30", "02:30", "03:30", "04:30"], ["02:00", "03:00", "04:00", "05:00"], ["02:00", "03:30", "04:30", "05:30"], ["10:00", "10:01", "10:02", "10:03"], ["11:00", "12:00", "13:00", "14:00"], ["21:00", "21:30", "23:00", "23:30"] ]; let transform = (someData) => { let output = []; someData && someData.forEach(arr => { output.push(arr.map((elem, index) => { return { [index % 2 === 0? 'startTime': 'endTime']: elem }; })); }); return output; }; // Using HTML element to display results document.getElementById('result').innerHTML = JSON.stringify(transform(data));
 <div id="result"></div>

這應該有效:

const transformData = (data) => {
  return data.map((items) => {
    const aux = [];
    for (let i = 0; i < items.length - 1; i++) {
      aux.push({
        startTime: items[i],
        endTime: items[i + 1]
      });
    }
    return aux;
  });
};

您可以嘗試以下方法:

data.map((arr) => {
    let x = [];
    for (let i = 0; i < arr.length - 1; i++) {
        x.push({ startTime: arr[i], endTime: arr[i + 1] });
    }
    return x;
});

你可以試試這個方法

const timeList = [
    ["10:00", "12:00", "13:00", "14:30"],
    ["10:00", "12:00", "13:00", "14:30"],
    ["10:00", "12:00", "13:00", "14:30"],
    ["10:00", "12:00", "13:00", "14:30"],
    ["10:00", "12:00", "13:00", "14:30"],
    ["10:00", "12:00", "13:00", "14:30"],
    ["10:00", "12:00", "13:00", "14:30"]
];

const getTimeTable = (timeData: string[]) => {
    return timeData.slice(0, 3).map((data, index: number) => ({ startDate: data, endDate: timeData[index + 1] }));
}
const value = timeList.map((x) => getTimeTable(x));

console.log('value', ...value);

您可以創建一個 function 來為內部數組創建新的數據結構,然后在上面創建 map。 在以下示例中,compile_times 使用 reduce 來創建新的內部數組。 reduce 的第四個參數是整個數組,這里{ [i + 1]: endTime }用於從數組中挑選下一項並將其分配給 endTime。

 const data = [ ["10:00", "12:00", "13:00", "14:30"], ["10:00", "12:00", "13:00", "14:30"], ]; const compile_times = (times) => times.reduce( (acc, startTime, i, { [i + 1]: endTime }) => endTime? acc.concat({ startTime, endTime }): acc, [] ); const res = data.map(compile_times); console.log(res);

暫無
暫無

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

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