可以说有两个对象,但一个对象的属性与另一个不同。有没有办法找出哪些属性匹配?如何检查两个对象属性是否匹配?
例如:
var objectOne = {
boy: "jack",
girl: "jill"
}
var objectTwo = {
boy: "john",
girl: "mary",
dog: "mo"
}
编辑:应该告诉我boy
和girl
属性名在两个对象中找到。
可以说有两个对象,但一个对象的属性与另一个不同。有没有办法找出哪些属性匹配?如何检查两个对象属性是否匹配?
例如:
var objectOne = {
boy: "jack",
girl: "jill"
}
var objectTwo = {
boy: "john",
girl: "mary",
dog: "mo"
}
编辑:应该告诉我boy
和girl
属性名在两个对象中找到。
var in_both = [];
for (var key in objectOne) { // simply iterate over the keys in the first object
if (Object.hasOwnProperty.call(objectTwo, key)) { // and check if the key is in the other object, too
in_both.push(key);
}
}
C.f.现在https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
,如果你想测试,如果值是相同的,也不止代码内if
的条件/身体根本补充。
您可以使用Object.keys
,并通过使用一次Array.prototype.reduce
循环,并列出了常见的按键 - 看演示如下:
var objectOne={boy:"jack",girl:"jill"};
var objectTwo={boy:"john",girl:"mary",dog:"mo"};
var result = Object.keys(objectOne).reduce(function(p,c){
if(c in objectTwo)
p.push(c);
return p;
},[]);
console.log(result);
Object.keys(objectOne).filter(k => Object.hasOwnProperty.call(objectTwo, k))
如果您想要找出哪些键匹配给定的两个对象,你可以遍历所有使用for... in
循环的对象的键。在我的函数中,它将通过键循环并返回两个对象中所有匹配键的数组。
let objectOne = {
boy: "jack",
girl: "jill"
}
let objectTwo = {
boy: "john",
girl: "mary",
dog: "mo"
}
function matchingKeys (obj1, obj2) {
let matches = [];
let key1, key2;
for (key1 in obj1) {
for (key2 in obj2) {
if (key1 === key2) {
matches.push(key1);
}
}
}
return matches
}
const result = matchingKeys(objectOne, objectTwo);
console.log(result)
@Kay - 除了'var','let'和未声明以及因此全局变量的奇怪组合之外,我发现这很容易阅读。 – nnnnnn
@Kay谢谢你的反馈,你是对的,它可以做到线性时间。我试图提高可读性,但我保持原有解决方案的精神。 –
@nnnnn谢谢你的反馈,我使我的变量保持一致。你最好 –
试试这个关于大小:
function compare(obj1, obj2) {
// get the list of keys for the first object
var keys = Object.keys(obj1);
var result = [];
// check all from the keys in the first object
// if it exists in the second object, add it to the result
for (var i = 0; i < keys.length; i++) {
if (keys[i] in obj2) {
result.push([keys[i]])
}
}
return result;
}
您的例子没有表现出很大的。你什么意思? – Li357
所以你想要一个属性*名称*在两个对象中的列表,而不考虑它们的*值*是什么?我们应该假设没有物体嵌套? – nnnnnn
@ nnnnnn。对,就是这样。 – Deke