猿问

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

我有一个嵌套数组。我正在使用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);


犯罪嫌疑人X
浏览 190回答 3
3回答

米琪卡哇伊

这不完全是这样的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);}

慕沐林林

过滤器返回 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 usersconsole.log(res);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答