Angular 如何检查对象是否存在于对象数组中
How to check if object exists inside array of object in Angular
我正在使用 Angular 8. 我想检查 Angular 对象是否存在于对象数组中。
我的目标是:
let objVenIns = {
'CntNumber': 4,
'CntMixer': 2,
'DevicePositions': 'NA',
'AddComments': 'NA',
}
对象数组还包含其他列:-
let arrRowData = [0: {'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
1: {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
2: {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}]
在Angular JS中,我曾经执行以下功能来检查对象是否存在于数组中:-
var data = $filter('filter')($scope.arrRowData, objVenIns, true)[0];
如何在Angular8中实现这样的对象搜索?
您也可以将 array.Find
or Array.Filter
与 Angular 一起使用。
let arrRowData = [{'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
{'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
{'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}];
let objVenIns = {
'CntNumber': 4,
'CntMixer': 2,
'DevicePositions': 'NA',
'AddComments': 'NA',
};
//if you want to check whole object
var isInArray = arrRowData.indexOf(objVenIns) !== -1;
console.log(isInArray);
//if you want to check by prop values
var isInArray1 = arrRowData.find(function(el){ return el.CntNumber === 4 && el.CntMixer ==2 }) !== undefined;
console.log(isInArray1);
您也可以像这样使用 Array.Propotype.reduce():
const filter = arrRowData.reduce((a, e, i) => {
if (
e.CntMixer === objVenIns.CntMixer &&
e.CntNumber === objVenIns.CntNumber &&
e.DevicePositions === objVenIns.DevicePositions &&
e.DevicePositions === objVenIns.DevicePositions &&
e.AddComments === objVenIns.AddComments
)
a.push(e); return a;
}, []);
console.log(filter)
您可以使用此 Link StackBlitz Link 来识别对象包含数组或对象
在这里,您可以使用 Array.isArray().
数组结构是..
arrRowData = [
{'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
{'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
{'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'},
[{'SrNo':4}]
]
您检查天气数组的方法是否包含对象或数组
isObject(values){
if (!Array.isArray (values) ){ return true;}
else{ return false; }
}
您的模板HTML是
<div *ngFor= "let section of arrRowData ">
<ul>
<li *ngIf="isObject(section); else printVal">
<span> This is Object {{section |json}} </span>
</li>
</ul>
<ng-template #printVal>
<li> This is Array {{section | json}} </li>
</ng-template>
</div>
如果你只想检查 object
是否存在,你可以使用 Array#some:
const arrRowData = [
{
SrNo: 1,
Name: 'ABC',
CntNumber: 1,
CntMixer: 3,
DevicePositions: 'Right',
AddComments: 'NA'
},
{
SrNo: 2,
Name: 'DEF',
CntNumber: 4,
CntMixer: 2,
DevicePositions: 'NA',
AddComments: 'NA'
},
{
SrNo: 3,
Name: 'XYZ',
CntNumber: 2,
CntMixer: 5,
DevicePositions: 'Left',
AddComments: 'NA'
}
];
const objVenIns = {
CntNumber: 4,
CntMixer: 2,
DevicePositions: 'NA',
AddComments: 'NA'
};
const areObjectEquals = (obj1, obj2) =>
obj1.CntMixer === obj2.CntMixer &&
obj1.CntNumber === obj2.CntNumber &&
obj1.DevicePositions === obj2.DevicePositions &&
obj1.DevicePositions === obj2.DevicePositions &&
obj1.AddComments === obj2.AddComments;
const objectExistsInArray = arrRowData.some(row => areObjectEquals(row, objVenIns));
console.log('objectExistsInArray?', objectExistsInArray);
PS1:我强烈建议您创建一个界面来输入您的 array
、object
和 methods
。
PS2:对于一种更动态的方法,您不需要告知要检查哪些属性,也不需要关心其属性是否发生变化,我建议您查看在 .
如果你想获取所有存在的对象,那么你可以过滤它:
let objVenIns = {
'CntNumber': 4,
'CntMixer': 2,
'DevicePositions': 'NA',
'AddComments': 'NA',
};
let arrRowData = [
{'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
{'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
{'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}
];
const result = arrRowData.filter(f=>
f.CntMixer === objVenIns.CntMixer &&
f.CntNumber === objVenIns.CntNumber &&
f.DevicePositions === objVenIns.DevicePositions &&
f.DevicePositions === objVenIns.DevicePositions &&
f.AddComments === objVenIns.AddComments
);
console.log(result);
console.log(result.length > 0 ? 'exists' : 'no');
我正在使用 Angular 8. 我想检查 Angular 对象是否存在于对象数组中。 我的目标是:
let objVenIns = {
'CntNumber': 4,
'CntMixer': 2,
'DevicePositions': 'NA',
'AddComments': 'NA',
}
对象数组还包含其他列:-
let arrRowData = [0: {'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
1: {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
2: {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}]
在Angular JS中,我曾经执行以下功能来检查对象是否存在于数组中:-
var data = $filter('filter')($scope.arrRowData, objVenIns, true)[0];
如何在Angular8中实现这样的对象搜索?
您也可以将 array.Find
or Array.Filter
与 Angular 一起使用。
let arrRowData = [{'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
{'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
{'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}];
let objVenIns = {
'CntNumber': 4,
'CntMixer': 2,
'DevicePositions': 'NA',
'AddComments': 'NA',
};
//if you want to check whole object
var isInArray = arrRowData.indexOf(objVenIns) !== -1;
console.log(isInArray);
//if you want to check by prop values
var isInArray1 = arrRowData.find(function(el){ return el.CntNumber === 4 && el.CntMixer ==2 }) !== undefined;
console.log(isInArray1);
您也可以像这样使用 Array.Propotype.reduce():
const filter = arrRowData.reduce((a, e, i) => {
if (
e.CntMixer === objVenIns.CntMixer &&
e.CntNumber === objVenIns.CntNumber &&
e.DevicePositions === objVenIns.DevicePositions &&
e.DevicePositions === objVenIns.DevicePositions &&
e.AddComments === objVenIns.AddComments
)
a.push(e); return a;
}, []);
console.log(filter)
您可以使用此 Link StackBlitz Link 来识别对象包含数组或对象 在这里,您可以使用 Array.isArray().
数组结构是..
arrRowData = [ {'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'}, {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'}, {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}, [{'SrNo':4}] ]
您检查天气数组的方法是否包含对象或数组
isObject(values){ if (!Array.isArray (values) ){ return true;} else{ return false; } }
您的模板HTML是
<div *ngFor= "let section of arrRowData "> <ul> <li *ngIf="isObject(section); else printVal"> <span> This is Object {{section |json}} </span> </li> </ul> <ng-template #printVal> <li> This is Array {{section | json}} </li> </ng-template> </div>
如果你只想检查 object
是否存在,你可以使用 Array#some:
const arrRowData = [
{
SrNo: 1,
Name: 'ABC',
CntNumber: 1,
CntMixer: 3,
DevicePositions: 'Right',
AddComments: 'NA'
},
{
SrNo: 2,
Name: 'DEF',
CntNumber: 4,
CntMixer: 2,
DevicePositions: 'NA',
AddComments: 'NA'
},
{
SrNo: 3,
Name: 'XYZ',
CntNumber: 2,
CntMixer: 5,
DevicePositions: 'Left',
AddComments: 'NA'
}
];
const objVenIns = {
CntNumber: 4,
CntMixer: 2,
DevicePositions: 'NA',
AddComments: 'NA'
};
const areObjectEquals = (obj1, obj2) =>
obj1.CntMixer === obj2.CntMixer &&
obj1.CntNumber === obj2.CntNumber &&
obj1.DevicePositions === obj2.DevicePositions &&
obj1.DevicePositions === obj2.DevicePositions &&
obj1.AddComments === obj2.AddComments;
const objectExistsInArray = arrRowData.some(row => areObjectEquals(row, objVenIns));
console.log('objectExistsInArray?', objectExistsInArray);
PS1:我强烈建议您创建一个界面来输入您的 array
、object
和 methods
。
PS2:对于一种更动态的方法,您不需要告知要检查哪些属性,也不需要关心其属性是否发生变化,我建议您查看在
如果你想获取所有存在的对象,那么你可以过滤它:
let objVenIns = {
'CntNumber': 4,
'CntMixer': 2,
'DevicePositions': 'NA',
'AddComments': 'NA',
};
let arrRowData = [
{'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
{'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
{'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}
];
const result = arrRowData.filter(f=>
f.CntMixer === objVenIns.CntMixer &&
f.CntNumber === objVenIns.CntNumber &&
f.DevicePositions === objVenIns.DevicePositions &&
f.DevicePositions === objVenIns.DevicePositions &&
f.AddComments === objVenIns.AddComments
);
console.log(result);
console.log(result.length > 0 ? 'exists' : 'no');