我正在尝试根据某些条件将值推送到数组中。
我有类似
的东西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]
。
我不确定这里出了什么问题。任何人都可以帮我吗?非常感谢!
答案 0 :(得分:4)
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}