为了账号安全,请及时绑定邮箱和手机立即绑定

array.filter 不返回 reactjs 中父数组的嵌套数组

array.filter 不返回 reactjs 中父数组的嵌套数组

犯罪嫌疑人X 2021-10-21 17:04:48
我有一个嵌套数组。我正在使用array.filter从父数组中获取子数组。我有这样的数据:"accounts": [    {        "ID": "001yQdmAAE",        "email": "inhome.user@ator.com",        "users": [            {                "Name": "Inhome User",                                    "MobilePhone": "34877"            }        ]    },    {        "ID": "00mAAE",        "email": "in.user@ator.com",        "users": [            {                "Name": "Inhome r",                                    "MobilePhone": "300077"            }        ]   }]我想根据 ID 从帐户数组中获取用户数组。我试过了array.filter。它返回    { "ID": "001yQdmAAE",      "email": "inhome.user@ator.com",      "users": [        {           "Name": "Inhome User",                               "MobilePhone": "34877"        }    }我只想要用户数组const res=this.state.data.filter((res)=>{ if(res.ID==record.ID){       return res.users; }});console.log(res);
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这不完全是这样的filter。filter的回调函数应返回一个布尔结果,该结果确定传入回调的元素是否应包含在 的返回值中filter。执行过滤后,我们将map每个结果对象提取其users属性。


const /*this.state.*/data = {"accounts": [{"ID": "001yQdmAAE","email": "inhome.user@ator.com","users": [{"Name": "Inhome User","MobilePhone": "34877"}]},{"ID": "00mAAE","email": "in.user@ator.com","users": [{"Name": "Inhome r","MobilePhone": "300077"}]}]};


const targetID = "00mAAE";

const result = data.accounts

  .filter(e => e.ID === targetID)

  .map(e => e.users);


console.log(result);


但如果IDs 是唯一的,则使用find代替filter,它只定位第一个匹配项:


const data = {"accounts": [{"ID": "001yQdmAAE","email": "inhome.user@ator.com","users": [{"Name": "Inhome User","MobilePhone": "34877"}]},{"ID": "00mAAE","email": "in.user@ator.com","users": [{"Name": "Inhome r","MobilePhone": "300077"}]}]};


const targetID = "00mAAE";

const result = data.accounts.find(e => e.ID === targetID);


if (result) {

  console.log(result.users);

}


查看完整回答
反对 回复 2021-10-21
?
慕沐林林

TA贡献2016条经验 获得超9个赞

过滤器返回 true 或 false,如果它返回 false 则该元素被过滤掉。


您应该首先过滤返回 true 或 false,然后使用 map 仅获取用户,然后使用 flat 将二维数组转换为普通数组。


const res=this.state.data.filter(

  res=>

    //return true or false in filter

    res.AccountID==record.AccountID

).map(

  //only need the users property

  res=>res.users

).flat();//flatten [users] to users

console.log(res);


查看完整回答
反对 回复 2021-10-21
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信