javascript - 从对象中检索值的辅助函数失败,对象中有多个项目
问题描述
当用户的 UID 作为参数传递时,我有一个辅助函数可以从 redux 存储中检索用户的姓名或电子邮件
From the store
console.log(typeof users) //object
console.log(users)
[
0: {
displayName: "User One"
email: "userone@example.com"
id: "c9E5RfPVVxMNPz3MsORs76cG46G3"
},
1: {
displayName: "User Two"
email: "usertwo@example.com"
id: "mbuPoIcEMOhEvSB23IRqj5AIbZn2"
}
]
// getUserDetails.js
import { useSelector } from 'react-redux';
export function getUserDetails(searchKey) {
const users = useSelector((state) => state.firestore.ordered.users);
console.log(users)
console.log(typeof users)
return (
users &&
searchKey &&
users.filter(function (obj) {
return Object.keys(obj).some(function (key) {
return obj[key].includes(searchKey);
});
})
);
}
它被我的@devexpress/dx-react-grid
CRUD 表使用,通过获取字段createdBy: fdsj75g43hfihsdhi
并返回名称或电子邮件,如下所示:
const UserNameFormatter = ({ value }) => {
return getUserDetails(value)[0].displayName;
};
该函数仅适用于一个用户,但一旦我将另一个用户添加到 Firestore,该函数就会引发错误:
TypeError: obj[key].includes is not a function
(anonymous function)
src/utils/getUserDetails.js:10
7 | searchKey &&
8 | users.filter(function (obj) {
9 | return Object.keys(obj).some(function (key) {
> 10 | return obj[key].includes(searchKey);
| ^ 11 | });
12 | })
13 | );
我很感激任何建议,谢谢。
解决方案
您似乎希望每个键都是一个字符串,但情况并非总是如此。
我建议在使用这样的包含方法之前进行检查:
import { useSelector } from 'react-redux';
export function getUserDetails(searchKey) {
const users = useSelector((state) => state.firestore.ordered.users);
console.log(users)
console.log(typeof users)
return (
users &&
searchKey &&
users.filter(function (obj) {
return Object.keys(obj).some(function (key) {
return typeof obj[key] === "string" && obj[key].includes(searchKey);
});
})
);
}
推荐阅读
- json - 元素隐式具有“任何”类型,因为在使用源自提取的 JSON 的对象时,类型“{}”没有索引签名错误
- asp.net - “Microsoft.ACE.OLEDB.16.0 提供程序未在本地计算机上注册”但我已经安装了它
- javascript - 组件获取道具VueJS时的forceUpdate
- python - 获取html标签的文本内容,例如python的js textcontent属性
- java - 何时使用 Collectors.groupingByConcurrent?
- c# - MarkupExtension,IValueConverter 默认构造函数
- jquery - jsdom应该如何配置NuxtJS?
- python - Python:难以实现读取 csv 中特定行的有效方法
- python - TypeError: float() 参数必须是字符串或数字,而不是 'Polygon'/'LineString'/'Point'
- c# - 我如何解析这个 CSV 文件,因为它有很多逗号,我需要 3 个部分来检索信息?