数组中的Javascript过滤器对象

时间:2019-08-22 12:32:20

标签: javascript filter

我遇到了这个挑战,我想返回一个包含对象的数组,其中控件数组在其子对象的“ value”属性中具有值。

除此之外,它还应该删除控件数组中没有值的对象

const data = [
      {
        'groupName': '1',
        'controls': [
          {'value': ''},
          {'value': ''}
        ]
      },
      {
        'groupName': '2',
        'controls': [
          {'value': ''},
          {'value': '2'}
        ]
      }
    ];

    const result = data.filter(cl => {
      return cl.controls.some(r => {
        return r.value !== '';
      });
    });

    console.log(result);

结果是这个

[
  {
    'groupName': '2',
    'controls': [
      {'value': ''},
      {'value': '2'}
    ]
  }
];

但我希望是这样

   [
      {
        'groupName': '2',
        'controls': [
          {'value': '2'}
        ]
      }
    ];

1 个答案:

答案 0 :(得分:2)

使用嵌套的filter()而不是some()

const data = [{groupName:"1",controls:[{value:""},{value:""}]},{groupName:"2",controls:[{value:""},{value:"2"}]}];;

const result = data.filter(cl => {
  cl.controls = cl.controls.filter(r => {
    return r.value !== '';
  });
  return cl.controls.length
});

console.log(result);

注意:它会更改原始数组。您可以使用Array.from(data).filter(...)来避免它