[英]Using JavaScript to retrieve more than one value from HTML element?
[英]Helper function to retrieve a value from an object fails with more than one item in the object
当用户的 UID 作为参数传递时,我有一个助手 function 从 redux 存储中检索用户名或 email
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
并返回一个名称或 email,如下所示:
const UserNameFormatter = ({ value }) => {
return getUserDetails(value)[0].displayName;
};
function 仅适用于一个用户,但只要我将另一个用户添加到 Firestore,function 就会引发错误:
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);
});
})
);
}
你可以试试这个
const UserNameFormatter = ({ value }) => {
return getUserDetails(value[0].displayName);
};
例子:
var temp1 = [ { displayName: "User One", email: "userone@example.com", id: "c9E5RfPVVxMNPz3MsORs76cG46G3", }, { displayName: "User Two", email: "usertwo@example.com", id: "mbuPoIcEMOhEvSB23IRqj5AIbZn2" } ] function getUserDetails(searchKey) { return ( temp1.filter(function (obj) { return Object.keys(obj).some(function (key) { return obj[key].includes(searchKey); }); }) ); } console.log(getUserDetails(temp1[1].id))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.