仅获取与其他对象数组匹配的对象

时间:2018-12-19 06:57:43

标签: javascript arrays

我有两个对象数组,

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中具有值的那些对象

2 个答案:

答案 0 :(得分:0)

您可以将.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; }

答案 1 :(得分:0)

forEach不会返回可以使用的值。因此,当您写l.abbreviation === c.forEach...时,===标记的右边没有任何内容。

一个简单的解决方案是使用Array#some函数。该函数根据指定的条件返回一个布尔值,这就是您在这里需要的。

因此您的代码变为

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

您可以阅读有关{@ {3}}数组上可用的所有不同方法的更多信息