我有接下來的兩個陣列:
const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 10}, {startDate: 26, number: 10}];
const secondArray= [{startDay: 2, endDay:10, number: 15}, {startDay: 20, endDay:30, number: 20}];
如果startDate在startDay和之間endDay,我必須減去 firstArraynumber和 secondArraynumber用結果創建新鍵
結果,我必須將新鍵放入 firstArray 并得到結果:
const firstArray = [{startDate: 5, number: 15, result: 0}, {startDate: 25, number: 25, result: -10}, {startDate: 26, number: 25, result: 0}];
如果我在同一范圍內(在 startDay 和 endDay 之間)有多個 startDate,我必須添加到該范圍的最后一個結果
我現在的代碼:
firstArray.map(el => ({...el, result: el.number - here's number from the secondArray according to the requirements}))
uj5u.com熱心網友回復:
Map 不能很好地回圈遍歷兩個陣列并更改值。
只需使用一個簡單的for回圈,檢查firstArray[i]和之間的條件secondArray[i],然后將值添加到firstArray[i].result
const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 20}];
const secondArray= [{startDay: 2, endDay:10, number: 10}, {startDay: 20, endDay:30, number: 20}];
for (let i = 0; i < Math.min(firstArray.length, secondArray.length); i )
if (secondArray[i].startDay < firstArray[i].startDate && firstArray[i].startDate < secondArray[i].endDay)
firstArray[i].result = firstArray[i].number - secondArray[i].number;
console.log(firstArray);
uj5u.com熱心網友回復:
當您使用兩個或多個陣列時,您需要知道您使用的是哪個索引。此外,為了獲得最佳性能,請避免使用任何型別的回呼函式,而是使用簡單的回圈:
const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 10}, {startDate: 26, number: 10}];
const secondArray= [{startDay: 2, endDay:10, number: 15}, {startDay: 20, endDay:30, number: 20}];
for(let i = 0, first, second, result = 0; i < firstArray.length; i )
{
first = firstArray[i];
second = secondArray[i];
if (second && first.startDate >= second.startDay && first.startDate <= second.endDay)
result = first.number - second.number;
else
result = first.number;
first.result = result;
}
console.log(firstArray);
使用map()也可以作業并產生稍微短的代碼,但它更慢且非常不必要:
const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 10}, {startDate: 26, number: 10}];
const secondArray= [{startDay: 2, endDay:10, number: 15}, {startDay: 20, endDay:30, number: 20}];
firstArray.map((first, i) =>
{
const second = secondArray[i];
if (second && first.startDate >= second.startDay && first.startDate <= second.endDay)
first.result = first.number - second.number;
else
first.result = ((firstArray[i-1]||{}).result || 0) first.number;
});
console.log(firstArray);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368758.html
