如何在我的情况下过滤数组值?

时间:2015-02-20 07:25:21

标签: javascript arrays angularjs

我正在尝试根据某些条件将值推送到数组中。

我有类似

的东西
var newEmplyee = [];
$scope.employees = [{'id':1, 'new':true},{'id':2, 'new':false}{'id':3, 'new':false}];
newEmployee = $scope.employees.filter(function(emp){
    if(emp.new) {
        return emp.id
    }
})

然而,当我console.log(newEmployee)时,我得到了一个像

这样的对象
{'id':1, 'new':true}

而不只是id [1]

我不确定这里出了什么问题。任何人都可以帮我吗?非常感谢!

4 个答案:

答案 0 :(得分:4)

您可以使用.filter().map()

的组合
  

Array.prototype.filter():filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素

     

Array.prototype.map():map()方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。

代码

var newEmployee = $scope.employees.filter(function(emp) {
    return emp.new; //Filter new employess
}).map(function(emp) {
    return emp.id; //Get Its ID
})

此外:在,

之后遗失{'id':2, 'new':false}
$scope.employees = [{'id':1, 'new':true},{'id':2, 'new':false}{'id':3, 'new':false}];

应该是

    $scope.employees = [{
    'id': 1,
    'new': true
}, {
    'id': 2,
    'new': false
} {
    'id': 3,
    'new': false
}];

var employees = [{'id':1, 'new':true},{'id':2, 'new':false},{'id':3, 'new':false}];

var newEmployee = employees.filter(function(emp) {
    return emp.new; //Filter new employess
}).map(function(emp) {
    return emp.id; //Get Its ID
});

console.log(newEmployee);

答案 1 :(得分:3)

我认为你想要过滤的对象。从你的方法返回emp对象而不是emp.id。

var newEmplyee = [];
$scope.employees = [{'id':1, 'new':true},{'id':2, 'new':false},{'id':3, 'new':false}];
newEmployee = $scope.employees.filter(function(emp){
    if(emp.new) {
        return emp;
    }
})

答案 2 :(得分:1)

过滤器迭代器不会更改数组,但会根据某些条件选择某些内容。所以你想要的是过滤器 map 迭代器的混合。

var newEmplyee = [];
$scope.employees = [{'id':1, 'new':true},{'id':2, 'new':false},{'id':3, 'new':false}];
newEmployee = $scope.employees.filter(function(emp){
    return emp.new;
}).map(function(a){
   return a.id;
});

您也可以使用 reduce 迭代器来解决您的问题。

var newEmplyee = [];
$scope.employees = [{'id':1, 'new':true},{'id':2, 'new':false},{'id':3, 'new':false}];
newEmployee = $scope.employees.reduce(function(container, e){
 if(e.new)
   container.push(e.id);
 return container;
}, []);

阅读关于 reduce 过滤器的好article

答案 3 :(得分:0)

 [{'id':1, 'new':true},{'id':2, 'new':false},{'id':3, 'new':false}] | filter:{'new':true}