Javascript 组合条件下的angularjs ng重复键值对

Javascript 组合条件下的angularjs ng重复键值对,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我想在键值对上使用一些特殊条件进行“ng repeat”。 我的json数据如下所示: mylist = { "Tom Hans": true, "Carl King": true, "anotherfield": "Josef Bush" } 或: 我的两个键是如上所述的字符串格式,它们的值总是“true”,还有一个固定键“anotherfield”,它可以有空值,也可以有如上所述的值 <ul> <li ng-repeat="(key, val) in

我想在键值对上使用一些特殊条件进行“ng repeat”。 我的json数据如下所示:

mylist = {
  "Tom Hans": true,
  "Carl King": true,
  "anotherfield": "Josef Bush"
}
或:

我的两个键是如上所述的字符串格式,它们的值总是“true”,还有一个固定键
“anotherfield”
,它可以有空值,也可以有如上所述的值

<ul>
    <li ng-repeat="(key, val) in mylist" ng-if="val == true">
        {{key}}</li>
</ul>
“anotherfield”为空时变量第二个版本的输出:

Tom Hans
Carl King
有人能帮我做到这一点吗?

    <ul>
        <li ng-repeat="(key, val) in mylist" ng-if="val || val.length">
            {{ val.length ? val : key }}</li>
    </ul>
    
  • {{val.length?val:key}
如果
val
为真,或者其长度大于0,则
val | | val.length
将匹配

如果val有长度,它将显示val,否则显示键。

  • {{val.length?val:key}
如果
val
为真,或者其长度大于0,则
val | | val.length
将匹配


如果val有一个长度,它将显示val,否则将显示键。

这似乎是简单而明确的:

<ul>
    <li ng-repeat="(key, val) in mylist" ng-if="val">
        {{ val === true ? key : val }}
    </li>
</ul>
    mylist中的
  • {{val==true?键:val}

这似乎很简单但很明确:

<ul>
    <li ng-repeat="(key, val) in mylist" ng-if="val">
        {{ val === true ? key : val }}
    </li>
</ul>
    mylist中的
  • {{val==true?键:val}

在if语句中,您不需要询问value==true,如果值为true,只需使用它,另一方面,值if不是“”,可能有一个长度,因此,在hava脚本中,如果某个值大于0,则为true,最后您可以在以下情况下执行ng切换:

<ul>
    <li ng-repeat="(key, val) in mylist" ng-switch="val">
    <li ng-switch-when="val"> {{key}}</li>
    <li ng-switch-when="val.length"> {{val}}</li>

</ul>
  • {{key}
  • {{val}

在if语句中,您不需要询问value==true,如果值为true,只需使用它,另一方面,值if不是“”,可能有一个长度,因此,在hava脚本中,如果某个值大于0,则为true,最后您可以在以下情况下执行ng切换:

<ul>
    <li ng-repeat="(key, val) in mylist" ng-switch="val">
    <li ng-switch-when="val"> {{key}}</li>
    <li ng-switch-when="val.length"> {{val}}</li>

</ul>
  • {{key}
  • {{val}

我个人会将此映射到控制器中的数组,这将减少视图中的观察者和子作用域,并简化视图

$scope.objToArray = function(obj){      
  return Object.keys(obj).reduce(function(a, key){
     if(obj[key] === true){
       a.push(key)
     }else if(typeof obj[key] === 'string' && obj[key].trim().length){
       a.push(obj[key])
     }
     return a;
  },[]);      
}
看法

  • {{item}}


  • 理想的是,如果在源代码中控制数据结构,我会考虑创建更友好的结构

    ,我将把它映射到控制器中的数组,它将减少观察者和子视图的范围并简化视图。
    $scope.objToArray = function(obj){      
      return Object.keys(obj).reduce(function(a, key){
         if(obj[key] === true){
           a.push(key)
         }else if(typeof obj[key] === 'string' && obj[key].trim().length){
           a.push(obj[key])
         }
         return a;
      },[]);      
    }
    
    看法

  • {{item}}


  • 理想的是,如果在源代码中控制数据结构,我会考虑创建更友好的结构

    为什么不重新格式化您的JSON数据,因此第三字段与其他字段的工作方式相同?为什么这样奇怪的数据结构?在看到我的答案时使用NG开关。为什么不重新格式化json数据,使第三个字段的工作方式与其他字段相同?为什么数据结构如此奇怪?在看到我的答案时使用ng开关;)这不起作用,因为它是
    val
    他想为最后一个字段显示的,而不是
    这给了我
    汤姆·汉斯
    卡尔·金另一个字段但是我想要的是
    另一个字段
    的值,而不是它的键。@JeremyThille这很简单,很好,我在,这也行吗?是的,有几种解决方案@弗兰克莫迪卡和下面的其他答案一样好。这不会像他想为最后一个字段显示的
    val
    那样起作用,而不是
    这给了我
    汤姆·汉斯
    卡尔·金另一个字段但是我想要的是
    另一个字段
    的值,而不是它的键,尽管如此。@JeremyThille这很简单也很好,我考虑过ng开关什么时候也可以?是的,有几种解决方案@弗兰克莫迪卡和下面的其他答案也一样好。