一尘不染

使用数组映射条件筛选结果

angularjs

我正在尝试使用数组映射进一步过滤对象,以准备将其发送到服务器进行保存。我可以过滤为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放在那里。谢谢阅读!


阅读 218

收藏
2020-07-04

共1个答案

一尘不染

您正在寻找的.filter()功能:

  $scope.appIds = $scope.applicationsHere.filter(function(obj) {
    return obj.selected;
  });

这将产生一个数组,该数组仅包含那些其“ selected”属性为true(或真实)属性的对象。

编辑 抱歉,我喝了咖啡,但我错过了评论-是的,正如jAndy在评论中指出的那样,过滤然后仅提取“ id”值,结果是:

  $scope.appIds = $scope.applicationsHere.filter(function(obj) {
    return obj.selected;
  }).map(function(obj) { return obj.id; });

一些功能库(例如Functional,在我看来并没有得到足够的.pluck()重视)具有从对象列表中提取属性值的功能,但是本机JavaScript具有一组相当精简的此类工具。

2020-07-04