2017-02-09 56 views
0

我有一個要求,添加新的對象到一個現有的對象數組,其中不允許重複的對象的唯一性是基於對象的所有屬性。所述對象包含屬性: 1. DepartmentID的 2. equipmentId 3. sectionId 4.服務Id_.findWhere()沒有給出屬性值的結果undefined

根據我的要求,equipmentId是一個可選字段,即當存在用於它沒有值可能是未定義的。我下面寫的那樣:

$scope.isDuplicateRecord = function(){ 
    var dupCheck = _.findWhere($scope.equipmentServiceMaps,{departmentId:$scope.equipmentServiceMap.department.departmentId, 
              equipmentId:$scope.equipmentServiceMap.equipment.equipmentId, 
              sectionId:$scope.equipmentServiceMap.section.sectionId, 
              serviceId:$scope.equipmentServiceMap.service.serviceId}) 

    if(dupCheck== undefined){ 
     return false 
    }else{ 
     return true 
    } 
} 

此代碼工作正常與quipmentId的所有值除了不確定的,即如果以相同的DepartmentID的,sectionId,服務Id和equipmentId爲未定義的現有對象。它沒有找到該對象並返回undefined因此我的檢查失敗。

當我更改爲基本for循環的代碼時,它工作,但我想繼續使用下劃線。下面是我的解決方法的代碼與循環,

var dupCheck = undefined; 
    for(var i = 0; i < $scope.equipmentServiceMaps.length; i++){ 
     if($scope.equipmentServiceMaps[i].departmentId == $scope.equipmentServiceMap.department.departmentId 
     && $scope.equipmentServiceMaps[i].sectionId == $scope.equipmentServiceMap.section.sectionId 
     && $scope.equipmentServiceMaps[i].serviceId == $scope.equipmentServiceMap.service.serviceId 
     && $scope.equipmentServiceMaps[i].equipmentId == ($scope.equipmentServiceMap.equipment? $scope.equipmentServiceMap.equipment.equipmentId : undefined)){ 
      dupCheck = $scope.equipmentServiceMaps[i]; 
      console.log(dupCheck); 
      break; 
     } 
    } 
    if(dupCheck == undefined){ 
     return false 
    }else{ 
     return true 
    } 

請建議我怎麼能繼續與underscore.js

回答

0

如果你正在尋找一些語法糖,這可能會幫助:

var search = { 
    departmentId:$scope.equipmentServiceMap.department.departmentId, 
    equipmentId:$scope.equipmentServiceMap.equipment.equipmentId, 
    sectionId:$scope.equipmentServiceMap.section.sectionId, 
    serviceId:$scope.equipmentServiceMap.service.serviceId 
} 

_.find($scope.equipmentServiceMaps, function(obj) { 
    return _.isMatch(_.defaults({}, obj, attrs), attrs); 
}) 

正常_.findWhere功能的工作原理或多或少是這樣的:

_.find($scope.equipmentServiceMaps, function(obj) { 
    return _.isMatch(obj, attrs); 
}) 

在我的版本中,對象中的任何未定義的值將被來自搜索attrs的值替換。原始對象未修改。