函数将记录值但 return 未定义
Function will log value but return undefined
下面的函数将在调用时记录 newData
但 returns undefined
的值。有谁知道为什么会这样?此外,我们将不胜感激对功能本身的任何反馈!
export const filterByDateTimeRange = (data=[{}], timeKey=[], startTime=moment(), stopTime=moment()) => {
let newData = [];
let i = 0;
for(const item of data) {
let time;
let index = 0
timeKey.map(key => {
time ? time = time[key] : time = item[key];
index++
if(index === timeKey.length) {
if(moment(time).isBetween(startTime, stopTime, undefined, '[)')) {
newData.push(item)
};
i++;
if(i === data.length) {
console.log(newData);
return (newData);
}
}
})
}
}
这个return里面有一个map函数。不是 filterByDateTimeRange() 的 return。如果你想 return newData。用for循环替换map函数。
地图:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
map
函数通常用于转换一个集合并存储结果,例如:
var squares = [2, 3, 4].map(x => { return x * x });
// result is squares = [4, 9, 16]
forEach
函数更适合在这里使用,因为您只想遍历数组而不关心存储转换。
然后当外循环完成你的函数时可以returnnewData
export const filterByDateTimeRange = (data=[{}], timeKey=[], startTime=moment(), stopTime=moment()) => {
let newData = [];
let i = 0;
for(const item of data) {
let time;
let index = 0
timeKey.forEach(key => { //changed to a forEach loop
time ? time = time[key] : time = item[key];
index++
if(index === timeKey.length) {
if(moment(time).isBetween(startTime, stopTime, undefined, '[)')) {
newData.push(item)
};
i++;
if(i === data.length) {
console.log(newData);
}
}
});
}
return newData; //add the return after your loop finishes
}
下面的函数将在调用时记录 newData
但 returns undefined
的值。有谁知道为什么会这样?此外,我们将不胜感激对功能本身的任何反馈!
export const filterByDateTimeRange = (data=[{}], timeKey=[], startTime=moment(), stopTime=moment()) => {
let newData = [];
let i = 0;
for(const item of data) {
let time;
let index = 0
timeKey.map(key => {
time ? time = time[key] : time = item[key];
index++
if(index === timeKey.length) {
if(moment(time).isBetween(startTime, stopTime, undefined, '[)')) {
newData.push(item)
};
i++;
if(i === data.length) {
console.log(newData);
return (newData);
}
}
})
}
}
这个return里面有一个map函数。不是 filterByDateTimeRange() 的 return。如果你想 return newData。用for循环替换map函数。
地图:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
map
函数通常用于转换一个集合并存储结果,例如:
var squares = [2, 3, 4].map(x => { return x * x });
// result is squares = [4, 9, 16]
forEach
函数更适合在这里使用,因为您只想遍历数组而不关心存储转换。
然后当外循环完成你的函数时可以returnnewData
export const filterByDateTimeRange = (data=[{}], timeKey=[], startTime=moment(), stopTime=moment()) => {
let newData = [];
let i = 0;
for(const item of data) {
let time;
let index = 0
timeKey.forEach(key => { //changed to a forEach loop
time ? time = time[key] : time = item[key];
index++
if(index === timeKey.length) {
if(moment(time).isBetween(startTime, stopTime, undefined, '[)')) {
newData.push(item)
};
i++;
if(i === data.length) {
console.log(newData);
}
}
});
}
return newData; //add the return after your loop finishes
}