我需要創建一個函式來排序或過濾或映射多個陣列并創建一個新陣列
const worker1 =[{day:1, w1:2},{day:2, w1:3},{day:3, w1:1}]
const worker2 =[ {day:2, w2:1},{day:3, w2:2}]
const worker3 =[{day:1, w3:3} ,{day:2, w3:2}]
我有 3 個陣列,我需要撰寫一個函式,將這 3 個陣列轉換為一個
const total=[ {day:1, w1:2, w3:3},
{day:2, w1:3, w2:1, w3:2},
{day:3, w1:1, w2:2} ]
uj5u.com熱心網友回復:
新的解決方案
const worker1 = [
{ day: 1, w1: 2 },
{ day: 2, w1: 3 },
{ day: 3, w1: 1 },
];
const worker2 = [
{ day: 2, w2: 1 },
{ day: 3, w2: 2 },
];
const worker3 = [
{ day: 1, w3: 3 },
{ day: 2, w3: 2 },
];
console.log(
sortWorkersByDate(worker1, worker2, worker3)
);
<script>
// with ...obj you can put as many workers you want
function sortWorkersByDate(...objWorkers) {
let output = {};
objWorkers.forEach((worker) => {
worker.forEach((dayObj) => {
({day} = dayObj); // Destructuring assignment https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
if (!output[day]) output[day] = {};
// logic for sorting
Object.assign(output[day], dayObj);
});
});
return output;
}
</script>
基本上通過:
using Object.assign:
我們先復制前一天的Object,然后安全地修改正確的key/value,不用擔心洗掉之前的所有東西
我 100% 確定這個錯誤是因為如果你使用
=equal 它會洗掉前一個,然后添加鍵/值,這是一個危險的舉動。更多詳細資訊:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign?retiredLocale=it
所以如果我們 push w2,之前我們有w1,它將變成{w1, w2}(? 而不是{w2}版本=)
結果將是:
{
"1": {
"day": 1,
"w1": 2,
"w3": 3
},
"2": {
"day": 2,
"w1": 3,
"w2": 1,
"w3": 2
},
"3": {
"day": 3,
"w1": 1,
"w2": 2
}
}
想要回圈這個陣列(你不怎么做)?
做就是了
Object
.values(NAME_OF_OBJECT)
.forEach();
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
舊答案
const worker1 = [
{ day: 1, w1: 2 },
{ day: 2, w1: 3 },
{ day: 3, w1: 1 },
];
const worker2 = [
{ day: 2, w2: 1 },
{ day: 3, w2: 2 },
];
const worker3 = [
{ day: 1, w3: 3 },
{ day: 2, w3: 2 },
];
console.log(sortWorkersByDay(worker1, worker2, worker3));
<script>
function sortWorkersByDay(...objWorkers) {
let output = {};
objWorkers.forEach((worker, workerIndex) => {
worker.forEach((dayObj) => {
const dayKey = `day${dayObj.day}`;
const workerKey = `w${workerIndex 1}`;
output[dayKey] = output[dayKey] || {};
// or this Object.assign or it won't work
Object.assign(output[dayKey], {
[workerKey]: dayObj[workerKey],
});
});
});
return output;
}
</script>
結果將是:
{
"day1": {
"w1": 2,
"w3": 3
},
"day2": {
"w1": 3,
"w2": 1,
"w3": 2
},
"day3": {
"w1": 1,
"w2": 2
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514917.html
標籤:javascript数组
