如何使用键多值过滤数组中的数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用键多值过滤数组中的数组?相关的知识,希望对你有一定的参考价值。

const usersLanguageData = {
  transactionId: 6847655349501841000,
  count: 5,
  providerList: [
    {
      code:['US'],
      weekendOfficeHours: false
    },
    {
      code:['US','IND'],
      weekendOfficeHours: true
    },
    {
      code:['US','IND','AUS'],
      weekendOfficeHours: false
    },
    {
      code:[],
      weekendOfficeHours: false
    },
    {
      weekendOfficeHours: true
    }
  ]
};

let filterKeyName1 = ["code"];
let filterValue1 = ['IND','US'];
//let filterValue2 = ['US'];
let filteredProviderData = usersLanguageData.providerList.filter(function(e) {
  return filterKeyName1.every(function(a) {
      console.log(e[a])
      return filterValue1.includes(e[a]);
  });
});

console.log(filteredProviderData);

这里的代码片段将usersLanguageData显示在对象表单中。这里我想用键过滤值,例如这里filterKeyName1 = ['code']和filterValue1 = ['IND','US']它会将第二个和第三个对象显示在usersLanguageData对象中。同样的方法是filterValue2进入注释行,它将显示usersLanguageData中的第1,第2和第3个对象。

答案

你应该在函数内再次使用every()。并且还使用e[a]在使用every()之前检查,因为你的一个项目没有code密钥

const usersLanguageData = { transactionId: 6847655349501841000, count: 5, providerList: [ { code:['US'], weekendOfficeHours: false }, { code:['US','IND'], weekendOfficeHours: true }, { code:['US','IND','AUS'], weekendOfficeHours: false }, { code:[], weekendOfficeHours: false }, { weekendOfficeHours: true } ] };

let filterKeyName1 = ["code"];
let filterValue1 = ['IND','US'];
//let filterValue2 = ['US'];
let filteredProviderData = usersLanguageData.providerList.filter(function(e) {
  return filterKeyName1.every(function(a) {
      console.log(e[a])
      return e[a] && filterValue1.every(x => e[a].includes(x));
  });
});

console.log(filteredProviderData);
另一答案

您可以使用值和对象的属性或空数组进行过滤。

const usersLanguageData = { transactionId: 6847655349501841000, count: 5, providerList: [{ code: ['US'], weekendOfficeHours: false }, { code: ['US','IND'], weekendOfficeHours: true }, { code: ['US','IND','AUS'], weekendOfficeHours: false }, { code: [], weekendOfficeHours: false }, { weekendOfficeHours: true }] };

let key = "code";
let values = ['IND','US'];
let result = usersLanguageData.providerList
    .filter(o => values.every(v => (o[key] || []).includes(v)));

console.log(result);

以上是关于如何使用键多值过滤数组中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

基于多值对象过滤javascript对象数组

如何过滤数组中不需要的值以进行绘图?使用 numpy 数组的 matplotlib 中的 ValueError

对按分量多值 (SIMD) 数组进行排序

Alamofire 发送带键和多值的参数数组

iPhone中的多值选择/取消选择

如何过滤数组中不需要的值以进行绘图?使用numpy数组的matplotlib中的ValueError