通过检查多个条件来筛选Javascript数组

3

我有一个数组:

var arr = 
[
    {
        "id":3,
        "first_name":"Laila",
        "last_name":"McCaine",
        "gender":"female",      
        "populations":[{"population_name":"Heart failure"}, {"population_name":"AMI"}],
        "score": 55.0
    },
    {
        "id":5,     
        "first_name":"Riva",
        "last_name":"Rontgen",
        "gender":"female",
        "populations":[{"population_name":"Pnumonia"}],
        "score": 85.0
    },
    {
        "id":8,
        "first_name":"Emily",   
        "last_name":"Rosewood",
        "gender":"female",  
        "populations":[],
        "score": 25.0
    }
];

变量:

var score='';
var population='';
var status = '';

我想使用数组的 filter 函数,并使用 and 条件,例如获取得分小于40、状态为1且人口名称为“心力衰竭”的记录。
问题在于,给定的三个变量是 dynamic 的,如果它们的值为 '',则不应用 filter
我该如何实现这一点?

你想要在数组每次被修改时自动应用数组过滤器吗? - Redu
很简单,检查过滤器是否为 "";你尝试了什么? - T.J. Crowder
2个回答

10

像这样的:

arr.filter(function(item) {
    var ok = true;

    if (score !== '') {
        ok = item.score < score;
    }

    if (ok && population !== '') {
        // check it
        ok = item.populations.map(function() {return item.population_name;}).indexOf(population) > -1;
    }

    if (ok && status !== '') {
        // check status
    }

    return ok;
});

0

var arr = 
[
    {
        "id":3,
        "status": 1,
        "first_name":"Laila",
        "last_name":"McCaine",
        "gender":"female",      
        "populations":[{"population_name":"Heart failure"}, {"population_name":"AMI"}],
        "score": 55.0
    },
    {
        "id":5,   
        "status": 1,
        "first_name":"Riva",
        "last_name":"Rontgen",
        "gender":"female",
        "populations":[{"population_name":"Pnumonia"}],
        "score": 85.0
    },
    {
        "id":8,
        "status": 0,
        "first_name":"Emily",   
        "last_name":"Rosewood",
        "gender":"female",  
        "populations":[],
        "score": 25.0
    }
];

function filterRecords( arr ){
  return arr.filter(function( record ){
    return record.score > 40 && record.status && (record.populations.filter(function( population ){
      return population.population_name == 'Heart failure';
    })).length;
  });
}

console.log( filterRecords( arr ) );
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接