【问题标题】:Get only Objects which get match from other Array of object [duplicate]仅获取与其他对象数组匹配的对象[重复]
【发布时间】:2018-12-19 06:57:43
【问题描述】:

我有两个对象数组,

let list = [
    {
        "currency": "Albania Lek",
        "abbreviation": "ALL",
    },
    {
        "currency": "Afghanistan Afghani",
        "abbreviation": "AFN",
    },
    {
        "currency": "Argentina Peso",
        "abbreviation": "ARS",
    }];

let c = [
    {
        "value": "AFN"
    },
    {
        "value": "ARS"
    }] 
let asd = list.filter(l=>{
    return l.abbreviation === c.forEach(x=>x.sCurrencyName)
})

我只想返回 list 中在对象数组 c 中具有值的那些对象

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您可以将.filter().some() 方法一起使用:

    let list = [
        {"currency": "Albania Lek", "abbreviation": "ALL"},
        {"currency": "Afghanistan Afghani", "abbreviation": "AFN"},
        {"currency": "Argentina Peso", "abbreviation": "ARS"}
    ];
    
    let c = [{"value": "AFN"}, {"value": "ARS"}];
        
    let result = list.filter(
      ({ abbreviation }) => c.some(({ value }) => value === abbreviation)
    );
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:

      forEach 不返回可以使用的值。所以当你写l.abbreviation === c.forEach...的时候,===符号的右边什么都没有。

      一个天真的解决方案是使用Array#some 函数。这个函数根据指定的条件返回一个布尔值,这就是你需要的。

      所以你的代码变成了

      let asd = list.filter(litem => c.some(citem => citem.value === litem.abbreviation))
      

      您可以阅读有关数组@https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array 上可用的所有不同方法的更多信息

      【讨论】:

        猜你喜欢
        • 2018-11-23
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2017-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多