在包含作为数组的对象的数组中检查重复项
Checking duplicate in an array that contains objects as an array
我想检查output
数组对象中是否存在重复的outputTypeId
。。
以下是JSON:
$scope.entities= [
{
"input": {
"id": 134
},
"output": [
{
"id": 135,
"outputTypeId": 4
}
]
},
{
"input": {
"id": 134
},
"output": [
{
"id": 135,
"outputTypeId": 7
}
]
},
{
"input": {
"id": 134
},
"output": [
{
"id": 135,
"outputTypeId": 9
}
]
}
]
下面是我尝试过的代码,但执行后没有进入条件。。
让outputTypeId
为[7],因为我正在检查多个outputTypeId,因此数组
$scope.checkForDuplicateOutputs = (outputTypeId) => {
for (var i = 0; i < $scope.entities.length; i++) {
for (var j = i; j < $scope.entities[i].output[j].length; j++) {
if (outputTypeId.contains($scope.entities[i].output[j].outputTypeId)) {
$scope.isDuplicateOutput = true;
break;
} else {
$scope.isDuplicateOutput = false;
}
}
}
}
function checkForDuplicates(outputTypeIds) {
$scope.isDuplicateOutput = $scope.entities.some(function(entity) { // Loop through entities
return entity.output.some(function(entityOutput) { // Look for any output
return outputTypeIds.indexOf(entityOutput.outputTypeId) != -1; // which is duplicated in 'outputTypeIds'
});
});
}
所以这个解决方案使用Array.some
-它有几个优点:
- 无需手动
break
循环 - 不需要
i
和j
变量来跟踪循环计数器 - 无需复制
$scope.isDuplicateOutput = <boolean>;
- 代码行数减少:)
您使用break
语句只破坏了内部循环,问题是即使重复标志设置为true,它也会在下一次迭代中重置为false。基本上,最终您只会得到上一次迭代的结果。
最快的解决方法是使用一个标志来表示是否需要停止外部循环:
$scope.checkForDuplicateOutputs = (outputTypeId) => {
var breakOut = false; // <--- this is new
for (var i = 0; i < $scope.entities.length; i++) {
if (breakOut) break; // <--- this is new
for (var j = i; j < $scope.entities[i].output[j].length; j++)
if (outputTypeId.contains($scope.entities[i].output[j].outputTypeId)) {
$scope.isDuplicateOutput = true;
breakOut = true; // <--- this is new
break;
} else {
$scope.isDuplicateOutput = false;
}
}
}
}
如果您仍然想迭代所有实体并拥有所有重复项的列表,您可以将$scope.isDuplicateOutput
作为一个数组,并将重复的ID推入其中。
相关文章:
- 使用Javascript使用数组检查文本框中的值
- JS数组-检查对象值是否重复
- Ruby数组检查并替换为
- 根据数组检查输入变量
- 根据字符串数组检查字符串(密码验证)
- 如何按数组检查字符串是否具有匹配的子字符串
- 多维布尔数组检查 Javascript 中是否全部为真
- 如何根据值数组检查当前窗口位置
- JavaScript多维数组检查
- Javascript 2D数组检查Div类
- JavaScript-用数组检查字符串
- 在for循环数组检查和JSON变量方面遇到问题
- 数组检查,然后是forEach()
- jQuery,根据数组检查类
- JavaScript根据数组检查textfield
- 根据javascript数组检查文本框值
- 根据数组检查值并返回另一个值
- Javascript数组检查
- Javascript数组检查值并分配到数组中
- JavaScript多维数组检查重复