![](/img/trans.png)
[英]How to check if an array of objects where I push into objects has a specific key value from another array of objects
[英]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
介于startDay
和endDay
之间,我必须减去 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.