[英]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
創建一個數據結構。 我還修改了通過模數數學獲取startDate
和endDate
的內部邏輯......就像這樣:
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.