根据多个布尔值之一分配值

时间:2019-01-25 14:38:28

标签: javascript angularjs

我正在尝试简化代码的if语句。 目前,我有这3个丑陋的if语句,我正在寻找一种方法来分配vm.model属性的名称,该属性基于当前对vm.model.status正确的属性。

vm.model.received === true,我想写些类似的东西

vm.model.status = //vm.model[name] << if vm.model.received/issued/cancelled true

在这种情况下,有可能写出更好看的代码而不是重复自己3次吗?

angular.module('app',[])

.controller('mainCtrl', function() {
  var vm = this;
  
  vm.model = {
    received: true,
    issued: false,
    cancelled: false,
    anotherProp: 'abc',
    anotherProp2: 'def'
  }
  
  if(vm.model.received) {
     vm.model.status = 'received';
  } else if(vm.model.issued) {
     vm.model.status = 'issued';
  } else if(vm.model.cancelled) {
     vm.model.status = 'cancelled';
  }
  
})
<html ng-app="app">
 <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>
 </head>
 <body>
    <div ng-controller="mainCtrl as vm">
      <form>
         <input type="radio" ng-model="vm.model.status" value="received">Received
         <input type="radio" ng-model="vm.model.status" value="issued">Issued
         <input type="radio" ng-model="vm.model.status" value="cancelled">Cancelled
      </form>
    </div>
  </body>
 </html>

1 个答案:

答案 0 :(得分:3)

您可以将键/值放入数组中并找到值。您可能还需要一个默认值。

vm.model.status = ['received', 'issued', 'cancelled'].find(k => vm.model[k]);