通过使用 Map Filter 与对象数组进行比较来返回字段

Posted

技术标签:

【中文标题】通过使用 Map Filter 与对象数组进行比较来返回字段【英文标题】:Return fields by comparing to array of objects using Map Filter 【发布时间】:2019-09-07 08:15:19 【问题描述】:

尝试返回array1的字段和array2的另一个字段,进行比较。

我有两个对象数组(客户和客户)。我想返回客户 ID 和客户名称,其中客户 ID 等于客户 ID。为此,我想使用地图、过滤器,但不知道如何使用下面是我的尝试,

       let clientcontract=this.state.addclient.filter(client=>
        return(
            this.state.customer.filter(cust=>
                return (
                    cust.id===client.id  // comparing customer and client id
                )
            )
        )
    );

这种方法用于获取客户 ID 和客户 ID 相同但不知道如何获取客户名称和客户 ID 并在客户合同中返回的字段,因为我第一次使用过滤器所以面临问题在里面。

【问题讨论】:

【参考方案1】:

您可以在filter() 函数中使用some() 函数。最后要获得客户名称,请使用map() 函数 - 见下文:

let clientcontract=this.state.customer.filter(cust => 
    return this.state.addclient.some(client => 
        return cust.id === client.id  // comparing customer and client id
    );
).map(cust => cust.name);

【讨论】:

但是,当条件为真时,如何在 clientcontract 中返回客户名称和客户 ID? clientcontract 将是来自 addclient 的值数组,然后满足条件 - 也许您需要交换 this.state.addclientthis.state.customer 左右 @MuhammadNabeel 你会得到一个过滤的addclient 元素列表,客户... 正如 JaromandaX 所说,如果你想获得客户,你可以切换 addclientcustomer... 是的,我得到了客户过滤结果,例如 customer-id:1,name:"abc",age:4,但我只想返回从过滤结果中获得的 name="abc" 和将其与客户端合同进行比较的客户端 ID,那么我该如何映射过滤器?

以上是关于通过使用 Map Filter 与对象数组进行比较来返回字段的主要内容,如果未能解决你的问题,请参考以下文章

JS之JQ的map/reduce/filter/sort/reverse

JavaScript数组与对象的关系

filter和map的使 使得数组对象变数组

ES6 Map遍历filter()筛选对象

zepto源码--$.map,$.each,$.grep--学习笔记

Javascript学习之Map和Filter函数实现方法详解