【问题标题】:Filter javascript object array based on another array -Javascript基于另一个数组过滤javascript对象数组-Javascript
【发布时间】:2020-11-20 12:34:51
【问题描述】:

我有一个案例,我想根据另一个对象数组过滤一个 javascript 对象数组。

    var arrCompany= [];
    var arrUsers = []
    var company =
    {
      companyId:6
    }
    arrCompany.push(company);
    var company =
    {
      companyId:7
    }
    arrCompany.push(company);

    var user =
    { 
    userId:1
    companyId :6
    }

    arrUsers.push(user);

    var user =
    { 
    userId:1
    companyId :7
    }

    arrUsers.push(user);

我想以这样一种方式过滤用户数组(arrUsers),过滤后的数组应包含 arrCompany 数组中的所有用户(即:基于公司 id。基于上述示例,过滤后的用户数组应包含项目公司 ID 6 和 7)。我需要一个适用于 IE 11 的解决方案。我尝试了以下方法但无法正常工作。任何人都可以帮忙解决这个问题

var filtered = arrUsers.filter(
function(e) {
  return this.indexOf(e.companyId) < 0;
},
arrComapny.companyId
);

【问题讨论】:

标签: javascript html jquery arrays


【解决方案1】:

您可以在过滤中使用Array.find

const arrCompany= [
  {companyId: 6}, 
  {companyId: 7},
  {companyId: 8},
];
const arrUsers = [
  {userId:1, companyId: 6}, 
  {userId:1, companyId: 7}, 
  {userId:1, companyId: 10},
];
const filtered = arrUsers.filter( usr => 
    // find companyId from current user in arrCompany                            
    arrCompany.find(company => 
      company.companyId === usr.companyId) );

console.log(filtered);

【讨论】:

  • 为了支持IE11,可以改写成下面这样吗?var filters = arrUsers.filter(function (usr) { return (//在arrCompany中从当前用户中找到companyId arrCompany.find(function (company) { return company.companyId === usr.companyId; }) ); });
  • @KooiInc..如果我添加一个附加条件作为 return company.companyId === usr.companyId && company.IsActive = true 是否有效
  • company.IsActive 在您的问题中未提及。 company.IsActive = true 可以写成company.IsActive。恕我直言,不应再支持 IE11。如果你真的需要它,请查看caniuse.com 或兼容性/polyfills in MDNArray[filter, find (and some for that matter)] 有 polyfills
【解决方案2】:

根据用户的 companyId 是否出现在 arrCompany 数组中过滤用户。

Array.some

const filtered = arrUsers.filter((user) => 
  arrCompany.some((company) => company.companyId === user.companyId)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多