reactjs - 从地图内的对象函数返回值
问题描述
我正在尝试运行一个getUserName函数,该函数在 Observable 管道、地图和另一个地图中被调用。我可以返回一个值,但我似乎无法将传递的数组映射到然后过滤掉 item.name 如果它与传入的 id 匹配。如果我显示代码可能会更容易理解:
不工作:
export const fetchDesignsData = (usersArray: [Users]) => (dispatch: Dispatch<Action>) => {
console.log(usersArray);
const DESIGNS_URL = `http://localhost:5000/designs`;
dispatch({
type: "FETCH_DATA_REQUEST",
});
const responsePromise = axios.get(DESIGNS_URL);
const response$ = from(responsePromise);
response$
.pipe(
map((response) => {
const newArray: { name: string; courses: number; wales: number; last_updated: string; by: any }[] = [];
response.data.map((item: { name: any; courses: any; wales: any; updated: any; user_id_last_update: any }) => {
return newArray.push({
name: item.name,
courses: item.courses,
wales: item.wales,
last_updated: item.updated,
by: getUserName(item.user_id_last_update, usersArray),
});
});
dispatch({
type: "FETCH_DATA_SUCCESS",
payload: newArray,
});
})
)
.subscribe();
};
const getUserName = (userNumber: number, usersArray: [Users]) => {
return () => {
usersArray.forEach((item) => {
if (item.id === userNumber) {
return item.name;
}
});
};
};
基本上 usersArray 看起来像这样:
[{id: 1, name: "Walter Doe"},
{id: 2, name: "John Doe"}]
所以我需要映射该数组,然后查看 item.id === userNumber,如果是,则返回 item.name。但它每次都返回空白。可能是因为它在 Observable 内部
解决方案
您需要使用过滤器,因为您需要返回满足条件的数组。
//...
const getUserName = (userNumber: number, usersArray: [Users]) => {
return () => {
usersArray.filter((item) => item.id === userNumber)
.map(item => item.name)
});
};
};
//...
推荐阅读
- windows - Jenkins Azure Blob 存储插件,用于将 Build 文件夹的内容而不是 build 文件夹复制到 $web azure blob static cotainer
- oracle - 将 Oracle 驱动程序更新到 12.2.0.1.0 后出现“java.sql.SQLRecoverableException:IO 错误:操作中断”
- r - 在散点图中突出显示向量中的特定点
- android - 如何为登录屏幕背景设计倾斜的对角线或圆角矩形可绘制资源文件?
- java - 在 Eclipse CDT 中获取执行的 GCC/clang 编译器命令
- node.js - 节点在回调之前等待迭代完成
- c# - 通过 Selenium、ChromeDriver 和 Chrome 执行测试时出现“消息=未知错误:无法聚焦元素”
- python - numpy中的逻辑错误
- python - Python/SQLAlchemy 格式化 DateRange 对象
- javascript - 将十六进制值转换为 unicode 字符