我需要将新对象添加到不允许重复的现有对象数组中,并且对象的唯一性基于对象的所有属性。该对象包含属性: departmentId 2. equipmentId sectionId 4. serviceId
根据我的要求,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
}
}
此代码与quintmentId的所有值一起正常工作,但未定义除外,即如果存在具有相同departmentId,sectionId,serviceId和equipmentId的现有对象为undefined。它没有找到该对象并返回undefined因此我的检查失败了。
当我将代码更改为基本for循环时,它工作正常,但我想继续使用下划线。以下是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 :(得分: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中的值替换。原始对象未经修改。