使用 reduce 映射对象列表时进行筛选



我想映射一个设备列表,但不是每个设备,所以我需要 我的地图函数中的某种过滤器。

这是我的地图函数的样子

get activities() {
return this.props.screenProps.store.activities.map((sensor) => {
return {
id: sensor.SensorID,
type: sensor.SensorType,
timestamp: sensor.EventDate,
key: sensor.SensorType,
}
})
}

我只想返回id高于5的传感器,所以我尝试了这个 但它没有用。

get activities() {
return this.props.screenProps.store.activities.map((sensor) => {
if (sensor.SensorID => 5){
return {
id: sensor.SensorID,
type: sensor.SensorType,
timestamp: sensor.EventDate,
key: sensor.SensorType,
}
}
}

我已经读到减少将是要走的路,我试图让它工作,但是 没有任何成功。有什么帮助吗?

假设 SensorID 是一个数字而不是一个字符串,你能试试这个吗

get activities() {
return this.props.screenProps.store.activities
// Filter out records for which SensorID is more than or equal to 5.
.filter(sensor => sensor.SensorID >= 5)
// Use that filtered array to map it in a new one.
.map((sensor) => {
return {
id: sensor.SensorID,
type: sensor.SensorType,
timestamp: sensor.EventDate,
key: sensor.SensorType,
}
})
}

如果您热衷于为此使用 reduce,可以尝试以下代码片段

get activities() {
return this.props.screenProps.store.activities
.reduce((acc, sensor) => {
// Push the element to final array only if the SensorId >= 5
if (sensor.SensorID >= 5) {
acc.push({
id: sensor.SensorID,
type: sensor.SensorType,
timestamp: sensor.EventDate,
key: sensor.SensorType,
});
}
return acc;
}, []);
}

最新更新