Qwe*_*Qwe 1 javascript object underscore.js
我有两个对象:
var a = {
world: 'Mamba',
planet: 'Oliver'
}
var b = {
world: 'Koko'
}
Run Code Online (Sandbox Code Playgroud)
如何只比较两个对象中存在的属性?在我的例子中,它将是属性"世界".
您可以获取两个对象的键(使用Object.keys),对它们执行交集(使用_.intersect)并迭代它们并比较:
var keys1 = Object.keys(a);
var keys2 = Object.keys(b);
var common = _.intersection(keys1, keys2);
common.forEach(function(key) {
if(a[key] === b[key]) {
// they are equal
}
});
Run Code Online (Sandbox Code Playgroud)
DEMO
var a = {
world: 'Mamba',
planet: 'Oliver',
test: 'x'
};
var b = {
world: 'Koko',
test: 'x'
};
var keys1 = Object.keys(a);
var keys2 = Object.keys(b);
var common = _.intersection(keys1, keys2);
var list = document.getElementById('list');
common.forEach(function(c) {
list.innerHTML += ('<li id=' + c + '>' + c + '</li>');
});
common.forEach(function(key) {
var elem = document.getElementById(key);
if (a[key] === b[key]) {
elem.innerHTML += ' [equal]';
} else {
elem.innerHTML += ' [not equal]';
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<h3>Common Properties</h3>
<ul id="list">
<ul>Run Code Online (Sandbox Code Playgroud)
您可以迭代a的所有属性,检查它是否存在于b中,并比较:
for(var prop in a) {
if(a.hasOwnProperty(prop) && b.hasOwnProperty(prop) && a[prop] === b[prop]) {
// they are equal
}
}
Run Code Online (Sandbox Code Playgroud)
注意:hasOwnProperty用于不包括通过原型提供的属性.
DEMO
var a = {
world: 'Mamba',
planet: 'Oliver',
test: 'x'
};
var b = {
world: 'Koko',
test: 'x'
};
var list = document.getElementById('list');
for (var prop in a) {
if (a.hasOwnProperty(prop) && b.hasOwnProperty(prop)) {
list.innerHTML += '<li id="' + prop + '">' + prop + '</li>';
var elem = document.getElementById(prop);
if (a[prop] === b[prop]) {
elem.innerHTML += ' [equal]';
} else {
elem.innerHTML += ' [not equal]';
}
}
}Run Code Online (Sandbox Code Playgroud)
<h3>Common Properties</h3>
<ul id="list">
</ul>Run Code Online (Sandbox Code Playgroud)
vanilla JS方式在运行时方面更有效.
原因是它只迭代a一次属性.
下划线方式需要获取对象键(需要对每个对象进行迭代),然后通过键阵列进行另一次迭代以找到交集,然后在比较之前再次遍历交集.