Object.keys.map 不返回原始键

Lor*_*rio 1 javascript arrays object reactjs

我从我的数据库中获取一个对象:例如:

{availability: null
bio: null
category: ""
createdAt: "2020-10-13T13:47:29.495Z"
email: "oznerol@prova.com"
firstName: "Lorenzo"
id: 37
image: null
job: null
lastName: "Del Rosario"
location: ""
password: "$2b$10$J6m71nc8gBXTvEENMwBjt.azNitCsna3LsxaDIUg.B0ztiTm5xFea"
phone: ""
skills: null
updatedAt: "2020-10-13T13:47:29.495Z"
website: ""}
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过此对象映射以将所有null值更改为''.

这是我的代码:

const [userData, setUserData] = useState()

useEffect( ()=>{
    
  const fetchData = async () => {
    const a = await getUserData(userId);//this retuns the object
    const cleanUserData = Object.entries(a).map(([key, value]) =>
      value === null || undefined ? value = '' : value
    )
    setUserData(cleanUserData);
  };
  fetchData();
},[])
Run Code Online (Sandbox Code Playgroud)

但通过这种方式,我改变了我的值,但我丢失了我的密钥,结果是一个像这样的对象:


{0:37
1:"oznerol@prova.com"
2:"$2b$10$J6m71nc8gBXTvEENMwBjt.azNitCsna3LsxaDIUg.B0ztiTm5xFea"
3:"Lorenzo"
4:"Del Rosario"
5:""
6:""
7:""
8:""
9:""
10:""
11:""
12
...}

Run Code Online (Sandbox Code Playgroud)

ibr*_*rir 7

双方Object.entriesObject.keys返回一个数组,所以当你使用map上,其结果将是一个数组。使用reduce代替来创建新对象,如下所示:

const cleanUserData = Object.entries(a).reduce((acc, [key, value]) => {
  acc[key] = value == null ? '' : value;
  return acc;
}, {});
Run Code Online (Sandbox Code Playgroud)

注意:您的原始测试value === null || undefined不正确,因为这不是您针对两个可能值进行测试的方式,它应该是value === null || value === undefined. 此外,测试value == null(使用 double-equal ==)就足够了,就像undefined == null在 javascript 中一样。

演示:

const cleanUserData = Object.entries(a).reduce((acc, [key, value]) => {
  acc[key] = value == null ? '' : value;
  return acc;
}, {});
Run Code Online (Sandbox Code Playgroud)