我正在尝试使用数组映射进一步过滤对象,以准备将其发送到服务器进行保存。我可以过滤为1个键值,这很不错,但是我想更进一步,将其与布尔值内部进行比较。
所以,现在这就是我所拥有的-
$scope.appIds = $scope.applicationsHere.map( function(obj){ if(obj.selected == true){ return obj.id; } });
这对于拉出id很有用,但是如果它们的选定值== false,我不想将它们压入这个新数组中,因此我将一个条件作为进一步过滤条件。这有点奏效,我得到了一个id数组,但是具有.selected == false的id仍然在数组中,只是值为null。因此,如果对象中有4个项目,其中2个为假,则看起来像这样-
appIds = {id1, id2, null, null};
我的问题是-有没有这样做的方法而没有将null放在那里。谢谢阅读!
您正在寻找的.filter()功能:
.filter()
$scope.appIds = $scope.applicationsHere.filter(function(obj) { return obj.selected; });
这将产生一个数组,该数组仅包含那些其“ selected”属性为true(或真实)属性的对象。
true
编辑 抱歉,我喝了咖啡,但我错过了评论-是的,正如jAndy在评论中指出的那样,过滤然后仅提取“ id”值,结果是:
$scope.appIds = $scope.applicationsHere.filter(function(obj) { return obj.selected; }).map(function(obj) { return obj.id; });
一些功能库(例如Functional,在我看来并没有得到足够的.pluck()重视)具有从对象列表中提取属性值的功能,但是本机JavaScript具有一组相当精简的此类工具。
.pluck()