Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回数组中包含父元素的单数子元素_Javascript_Arrays_Vuejs2 - Fatal编程技术网

Javascript 返回数组中包含父元素的单数子元素

Javascript 返回数组中包含父元素的单数子元素,javascript,arrays,vuejs2,Javascript,Arrays,Vuejs2,以下是我想做的: 我希望遍历用户的位置,然后使用这些位置循环遍历分配了位置的办公室,只返回办公室和用户所在的位置 这是我尝试过的,我知道这是多余的,只是通过所有的办公室,按用户位置过滤,并返回与用户位置相同的精确结果,我就是不知道如何浏览它们,获取办公室中的职位,然后只返回id为=user positions.id的offices&office.positions 滤器{ var userPositions=this.users.positions; var offices=本公司办公室; 变量

以下是我想做的:

我希望遍历用户的位置,然后使用这些位置循环遍历分配了位置的办公室,只返回办公室和用户所在的位置

这是我尝试过的,我知道这是多余的,只是通过所有的办公室,按用户位置过滤,并返回与用户位置相同的精确结果,我就是不知道如何浏览它们,获取办公室中的职位,然后只返回id为=user positions.id的offices&office.positions

滤器{ var userPositions=this.users.positions; var offices=本公司办公室; 变量过滤器=[] var位置=办公室。forEachoffice=>{ office.positions.forEachposition=>{ 过滤器位置 } }; userPositions.forEachuserP=>{ filter.findp=>p.id==userP.id } 控制台日志过滤器 } 以下是我希望它的外观:

[
    {
        "id": 1,
        "name": "Leadership Committee",
        "abbreviation": "LC",
        "positions": [
            {
                "id": 122,
                "name": "Deputy Director",
                "abbreviation": "DD",
            },
        ]
    },
    {
        "id": 10,
        "name": "Admin Committee",
        "abbreviation": "AC",
        "positions": [
            {
                "id": 124,
                "name": "Director",
                "abbreviation": "Dir",
            }
        ]
    }
]
以下是user.positions信息:

{
    "id": 1,
    "username": "Admin",
    "status": 1,
    "created_at": "2019-07-23 21:49:56",
    "updated_at": "2019-08-30 07:22:17",
    "positions": [
        {
            "id": 124,
            "name": "Director",
            "abbreviation": "Dir",
        },
        {
            "id": 122,
            "name": "Deputy Director",
            "abbreviation": "DD",
        }
    ]
}
这里是如何抓住所有的办公室看:

[
    {
        "id": 1,
        "name": "Leadership Comittee",
        "abbreviation": "LC",
        "positions": [
            {
                "id": 119,
                "name": "Director",
                "abbreviation": "Dir",
                "pivot": {
                    "office": 1,
                    "position": 119,
                    "hierarchy": 1
                }
            },
            {
                "id": 122,
                "name": "Deputy Director",
                "abbreviation": "DD",
                "pivot": {
                    "office": 1,
                    "position": 122,
                    "hierarchy": 2
                }
            },
        ]
    },
    {
        "id": 10,
        "name": "Admin Comittee",
        "abbreviation": "AC",
        "positions": [
            {
                "id": 124,
                "name": "Director",
                "abbreviation": "Dir",
                "pivot": {
                    "office": 10,
                    "position": 124,
                    "hierarchy": 0
                }
            }
        ]
    }
]

简化问题陈述

给定两个源数组,比如source1和source2,返回所有source2 与source1中特定字段相关的数组元素

关系:source1中的字段应与嵌套数组的一个元素匹配 source2中的字段

约束条件:应先修改source2数组中的元素 按上述关系返回

级别1:循环遍历案例中的所有source1元素user.positions。这里我首先使用了Array.prototype.reduce,因为如果在source2中找不到相关元素,我的最终返回数组可能比source1数组小。就你而言,在任何办公室都找不到职位

级别2:在Array.prototype.reduce函数中,对于source1的每个元素,案例中的每个用户位置都会在source2数组中返回一个匹配的元素。在本例中,我使用了Array.prototype.map函数,因为约束规定应该修改source2数组中的元素

级别3:在Array.prototype.map函数中,在本例中修改source2每个办公室的每个元素。我在map函数中应用关系,修改source2each office中的每个元素。在您的例子中,我正在修改每个办公室的positions属性,将Array.prototype.filter函数应用于带有用户position对象的办公室positions数组

过滤器可能会给出一个空数组或office positions数组的子数组,用于替换原始office positions数组本身。还可以使用贴图功能修改每个过滤对象,以删除一些不需要的字段。在您的例子中,我从每个office position对象中删除了pivot

级别4:删除其positions属性为空数组的所有已修改source2对象

把这一切放在一起

风险值数据={ 用户:{ id:1, 用户名:Admin, 现状:1, 创建时间:2019-07-2321:49:56, 更新时间:2019-08-3007:22:17, 职位:[ { id:124, 姓名:董事, 缩写:Dir }, { 身份证号码:122, 姓名:副局长,, 缩写:DD } ] }, 办公室:[ { id:1, 名称:领导委员会, 缩写:LC, 职位:[ { 身份证号码:119, 姓名:董事, 缩写:Dir, 支点:{ 办公室:1,, 职位:119, 等级:1 } }, { 身份证号码:122, 姓名:副局长,, 缩写:DD, 支点:{ 办公室:1,, 职位:122, 等级:2 } } ] }, { id:10, 姓名:行政委员会, 缩写:AC, 职位:[ { id:124, 姓名:董事, 缩写:Dir, 支点:{ 办公室:10,, 职位:124, 层次结构:0 } } ] } ], 滤器{ 返回this.users.positions.reduceAC,userPosition=>{ acc=[ …acc, …这是我的办公室 .mapoffice=>{ 返回{ 办公室 职位:办公室 滤器 officePosition=>officePosition.id===userPosition.id .map{pivot,…rest}=>rest }; } .filteroffice=>office.positions.length>0 ]; 返回acc; }, []; } };
console.logdata.filter;这很好用!!!!非常感谢。你能给我解释一下它是怎么工作的吗?我理解其中的一些内容,但我仍然不完全理解,我想知道。@Riley当然,我会用explanations@Riley. 请检查一下电话号码 更新答案。如果仍然不清楚,请告诉我