【问题标题】:For object with multiple arrays, return array based on checking two values inside the same array对于具有多个数组的对象,根据检查同一数组内的两个值返回数组
【发布时间】:2019-10-05 20:24:17
【问题描述】:

我正在尝试根据内部代码对多个数组进行排序,我能够根据单个代码进行排序,但我无法根据同一数组中的多个代码进行排序

我正在尝试使用过滤器并在 javascript 中查找

我的模拟 Json 是

response: 
[ 
{   id: 1, 
    moreDetails: [ 
          { code: '24', value: some}, 
          { code: '25', value: some}, 
          { code: '04', value: some}], 
    days: 10}
{   id: 2, 
    moreDetails: [ 
          { code: '24', value: some}, 
          { code: '04', value: some}], 
     days: 10}
{   id: 3, 
    moreDetails: [
          { code: '24', value: some},
          { code: '25', value: some}],
      days: 10}
{   id: 4, 
    moreDetails: [ 
          { code: '24', value: some},
          { code: '25', value: some}, 
          { code: '04', value: some}], 
      days: 10}
{   id: 5, 
    moreDetails: [ 
          { code: '25', value: some}, 
          { code: '04', value: some}], 
      days: 10}

我试过了

const sorttwofive = response.filter(c=> c.moreDetails.find(s => s.code === '25'));
const sorttwofour = response.filter(c=> c.moreDetails.find(s => s.code === '24'));
const sortfour = response.filter(c=> c.moreDetails.find(s => s.code === '04'));

当我想根据两个代码过滤响应时,这些工作正常并获得准确的输出。我得到空对象。 我试过这样做,

const const sorttwofiveandfour = response.filter(c=> c.moreDetails.find(s => s.code === '25' && s.code === '24'));

任何帮助将不胜感激。

【问题讨论】:

  • 您的预期输出是什么? '25' !== '24',因此您当前的代码将永远找不到任何东西(除非 .lob 是不纯的吸气剂或类似的东西)
  • 当我们在响应中同时包含代码“25”和“24”时,我需要对数组进行排序。 (我的错不是 .lob 它的 .code)
  • @Eddie 不,它不起作用:(

标签: javascript reactjs filtering


【解决方案1】:

您可以通过['24', '25'] 的数组是否通过every 测试来.filter,其中测试.finds 与moreDetails 中的匹配代码:

const some = 'some';
const response = [{
    id: 1,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '25',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 2,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 3,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '25',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 4,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '25',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 5,
    moreDetails: [{
        code: '25',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  }
];

const objsWhichContainCode24And25 = response.filter(
  obj => ['24', '25'].every(
    codeToFind => obj.moreDetails.find(s => s.code === codeToFind)
  )
);
console.log(objsWhichContainCode24And25);

对于O(N)的复杂度,而不是O(N^2)的复杂度,提前在moreDetail中构造一组代码:

const some = 'some';
const response = [{
    id: 1,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '25',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 2,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 3,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '25',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 4,
    moreDetails: [{
        code: '24',
        value: some
      },
      {
        code: '25',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  },
  {
    id: 5,
    moreDetails: [{
        code: '25',
        value: some
      },
      {
        code: '04',
        value: some
      }
    ],
    days: 10
  }
];

const objsWhichContainCode24And25 = response.filter(
  obj => {
    const codes = new Set(obj.moreDetails.map(({ code }) => code));
    return ['24', '25'].every(code => codes.has(code));
  }
);
console.log(objsWhichContainCode24And25);

【讨论】:

    【解决方案2】:

    如果您想找到同时具有代码 24 和 25 的值,您应该尝试以下操作。

    const sorttwofiveandfour = response.filter(c=> c.moreDetails.find(s => s.code === '25') && c.moreDetails.find(s => s.code ==='24'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2021-04-09
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多