首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类型记录中的渐变对象过滤嵌套数组

使用类型记录中的渐变对象过滤嵌套数组
EN

Stack Overflow用户
提问于 2018-11-10 18:49:12
回答 1查看 196关注 0票数 1

我的对象数组(Json格式)如下所示

代码语言:javascript
复制
var datas = [
  {
    "Id": "1",
    // Here 10 fields
    "tests": [
            {
                "id":"1-1",
                "isSelected": true,
            },
            {
                "id":"1-2",
                "isSelected": false,
            },
        ]
  },
  {
    "Id": "2",
    // Here 10 fields
    "tests": [
            {
                "id":"2-1",
                "isSelected": true,
            },
            {
                "id":"2-2",
                "isSelected": true,
            },
        ]
  },
  {
    "Id": "3",
    // Here 10 fields
    "tests": [
            {
                "id":"3-1",
                "isSelected": false,
            },
            {
                "id":"3-2",
                "isSelected": false,
            },
        ]
  }
]

我试着像下面这样

代码语言:javascript
复制
var filteredData = datas.filter( t => t.tests.filter(o => o.isSelected));

要用测试获得所有的数据,"isSelected"值的是true,并且不起作用。是否有以下格式的数据。

代码语言:javascript
复制
[
  {
    "Id": "1",
    // Here 10 fields
    "t": [
            {
                "id":"1-1",
                "isSelected": true,
            }
        ]
  },
  {
    "Id": "2",
    // Here 10 fields
    "tests": [
            {
                "id":"2-1",
                "isSelected": true,
            },
            {
                "id":"2-2",
                "isSelected": true,
            },
        ]
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-10 18:55:39

您在正确的轨道上,但是从外部filter回调返回内部filter结果(一个数组)。数组是真实的,所以你保留一切。

您需要分两个步骤处理每个外部对象:

  1. 过滤其tests,以及
  2. 如果其tests为空,则将其完全过滤掉。

所以:

代码语言:javascript
复制
var filteredData = datas.filter(t => {
  t.tests = t.tests.filter(o => o.isSelected);
  return t.tests.length !== 0;
});

代码语言:javascript
复制
var datas = [
  {
    "Id": "1",
    // Here 10 fields
    "tests": [
            {
                "id":"1-1",
                "isSelected": true,
            },
            {
                "id":"1-2",
                "isSelected": false,
            },
        ]
  },
  {
    "Id": "2",
    // Here 10 fields
    "tests": [
            {
                "id":"2-1",
                "isSelected": true,
            },
            {
                "id":"2-2",
                "isSelected": true,
            },
        ]
  },
  {
    "Id": "3",
    // Here 10 fields
    "tests": [
            {
                "id":"3-1",
                "isSelected": false,
            },
            {
                "id":"3-2",
                "isSelected": false,
            },
        ]
  }
]

var filteredData = datas.filter(t => {
  t.tests = t.tests.filter(o => o.isSelected);
  return t.tests.length !== 0;
});

console.log(filteredData);
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

或者如果你真的想要一个简洁的箭头函数:

所以:

代码语言:javascript
复制
var filteredData = datas.filter(t =>
  (t.tests = t.tests.filter(o => o.isSelected)).length !== 0
);

代码语言:javascript
复制
var datas = [
  {
    "Id": "1",
    // Here 10 fields
    "tests": [
            {
                "id":"1-1",
                "isSelected": true,
            },
            {
                "id":"1-2",
                "isSelected": false,
            },
        ]
  },
  {
    "Id": "2",
    // Here 10 fields
    "tests": [
            {
                "id":"2-1",
                "isSelected": true,
            },
            {
                "id":"2-2",
                "isSelected": true,
            },
        ]
  },
  {
    "Id": "3",
    // Here 10 fields
    "tests": [
            {
                "id":"3-1",
                "isSelected": false,
            },
            {
                "id":"3-2",
                "isSelected": false,
            },
        ]
  }
]

var filteredData = datas.filter(t =>
  (t.tests = t.tests.filter(o => o.isSelected)).length !== 0
);

console.log(filteredData);
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53242296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档