Если бы у меня есть два ассоциативных массива, каков был бы самый эффективный способ сделать разность против их значений?
Например, данный:
array1 = {
foreground: 'red',
shape: 'circle',
background: 'yellow'
};
array2 = {
foreground: 'red',
shape: 'square',
angle: '90',
background: 'yellow'
};
Как я проверил бы один по другому, такому, что пропавшие без вести объектов или дополнительный являются полученным массивом. В этом случае, если бы я хотел сравнить array1 в array2, то он возвратился бы:
array3 = {shape: 'circle'}
Пока, если бы я сравнил array2 в array1, он возвратился бы:
array3 = {shape: 'square', angle: '90'}
Заранее спасибо за Вашу справку!
Попробуйте так:
function diff(obj1, obj2) {
var result = {};
$.each(obj1, function (key, value) {
if (!obj2.hasOwnProperty(key) || obj2[key] !== obj1[key]) {
result[key] = value;
}
});
return result;
}
Если вы знакомы с синтаксисом PHP, посмотрите http://phpjs.org/functions/index, который включает почти все функции PHP, связанные с массивами, преобразованные в JavaScript - включая array_diff