假设我有一个对象数组
var arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];
var obj1 ={name:'John', lastName:'Smith'};
如何使用JS检查另一个对象中是否存在对象?
嵌套循环会起作用吗?第一个循环遍历数组内的对象,第二个循环遍历对象内部的键/值对,并将它们与obj1键/值对进行比较?有一个更好的方法吗 ?或者我应该使用3个循环?
该函数应该返回包含obj1的arr中的obj。例如:应返回arr [0],因为它包含obj1
function objInArr(srcArr, obj) {
var arr = [];
//var srcLength = 0;
//var sourceSize = Object.keys(source).length; // The length of the source obj
srcArr.forEach(function(el) {
el.forEach(function(objEl){
obj.forEach(function(sourceEl){
if( sourceEl === objEl) { arr.push(sourceEl); }
});
});
});
return arr;
}
答案 0 :(得分:2)
您可以结合使用 Arry#find()
和 Array#some()
方法来遍历数组对象并查找具有相同键的对象和值是否存在:
FROM microsoft/powershell:ubuntu16.04
RUN apt-get update && apt-get install git -y
RUN git clone https://github.com/DTW-DanWard/PowerShell-Beautifier.git
RUN cp -a PowerShell-Beautifier/src/. /opt/microsoft/powershell/6.0.0-rc/Modules
ENTRYPOINT [ "pwsh", "-c" ]
CMD [ "Get-Help", "Edit-DTWBeautifyScript" ]
如果您要返回var exists = arr.find(function(o){
return Object.keys(o).some(function(k){
return !Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k];
});
});
,则会返回object
,如果您想要返回boolean
,则可以使用.find()
更改.some()
。
如果一个对象没有迭代的!Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k]
或者它的key
'不相同,那么语句value
将会退出。
<强>演示:强>
var arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];
var obj1 ={name:'John', lastName:'Smith'};
var exists = arr.find(function(o){
return Object.keys(o).some(function(k){
return !Object.keys(obj1).indexOf(k)>-1 || o[k]!=obj1[k];
});
});
console.log(exists);
答案 1 :(得分:0)
// object contains subObject
function partialContains(object, subObject) {
// Create arrays of property names
const objProps = Object.getOwnPropertyNames(object);
const subProps = Object.getOwnPropertyNames(subObject);
if (subProps.length > objProps.length) {
return false;
}
for (const subProp of subProps) {
if (!object.hasOwnProperty(subProp)) {
return false;
}
if (object[subProp] !== subObject[subProp]) {
return false;
}
}
return true;
}
您现在可以像这样使用它:
const arr= [{name:'John', lastName:'Smith', age:25}, {name:'Steve', lastName:'Johnson', age:56}];
const obj1 ={name:'John', lastName:'Smith'};
const containing = arr.find((object) => partialContains(object, obj1));
如果未定义containing
,则找不到任何内容,否则返回包含obj1
的对象。