繁体   English   中英

我需要从另一个对象数组的另一个键中减去一个对象数组的键

[英]I need to minus one key, of array of objects, from another key of another array of objects

我有接下来的两个 arrays:

const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 20}];
const secondArray= [{startDay: 2, endDay:10, number: 10}, {startDay: 20, endDay:30, number: 20}];

如果startDate介于startDayendDay之间,我必须减去 firstArray number和 secondArray number以创建新的键结果

结果,我必须将新键放入 firstArray 中,结果如下:

const firstArray = [{startDate: 5, number: 15, result: 5}, {startDate: 25, number: 25, result: 0}];

我现在拥有的代码:

firstArray.map(el => ({...el, result: el.number - here's number from the secondArray according to the requirements}))

Map 不能很好地循环通过两个 arrays 和更改值。

只需使用一个简单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);

当您使用两个或更多 arrays 时,您需要知道您正在使用哪个索引。 此外,为了获得最佳性能,请避免使用任何类型的回调函数,而是使用简单的循环:

 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, first, second; i < firstArray.length; i++) { first = firstArray[i]; second = secondArray[i]; if (first.startDate >= second.startDay && first.startDate <= second.endDay) first.result = first.number - second.number; } console.log(firstArray);

使用map()也可以工作并生成稍微短一些的代码,但它更慢且非常不必要:

 const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 20}]; const secondArray= [{startDay: 2, endDay:10, number: 10}, {startDay: 20, endDay:30, number: 20}]; firstArray.map((first, i) => { const second = secondArray[i]; if (first.startDate >= second.startDay && first.startDate <= second.endDay) first.result = first.number - second.number; }); console.log(firstArray);

看看这篇文章

const firstArray = [{
      startDate: 5,
      number: 15
    }, {
      startDate: 25,
      number: 20
    }];
    const secondArray = [{
      startDay: 2,
      endDay: 10,
      number: 10
    }, {
      startDay: 20,
      endDay: 30,
      number: 20
    }];
    

let temp = 0;
const newArray = firstArray.map(el => {
    secondArray.forEach(elem => temp = elem.number);
  return {...el, result: el.number - temp};
});
console.log(newArray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM