2017-02-09 5 views
0

중복이 허용되지 않고 개체의 고유성이 개체의 모든 속성을 기반으로하는 기존 개체 배열에 새 개체를 추가해야한다는 요구 사항이 있습니다. . 개체 속성을 포함 1. 2. 내 요구 사항에 따라 4. 서비스 id_.findWhere()가 속성 값에 대한 결과를 지정하지 않았습니다. 정의되지 않음

sectionId 3. equipmentId departmentId, equipmentId는 대한 값이 없을 때 정의되지 않을 수 있습니다 선택 필드 즉이다. 나는 그것을 아래 쓴 : 같은 departmentId, 정의와 같은 sectionId, 서비스 id와 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의 모든 값, 즉 잘 작동한다. 그것은 그 객체를 찾지 못해서 내 검사가 실패했기 때문에 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의 값으로 대체됩니다. 원본 개체는 수정되지 않았습니다.