Выполнение “Разности” на Ассоциативном массиве в JavaScript / jQuery?

Если бы у меня есть два ассоциативных массива, каков был бы самый эффективный способ сделать разность против их значений?

Например, данный:

  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'}

Заранее спасибо за Вашу справку!

6
задан Matrym 1 April 2010 в 07:28
поделиться

2 ответа

Попробуйте так:

function diff(obj1, obj2) {
    var result = {};
    $.each(obj1, function (key, value) {
        if (!obj2.hasOwnProperty(key) || obj2[key] !== obj1[key]) {
            result[key] = value;
        }
    });

    return result;
}
7
ответ дан 9 December 2019 в 22:31
поделиться

Если вы знакомы с синтаксисом PHP, посмотрите http://phpjs.org/functions/index, который включает почти все функции PHP, связанные с массивами, преобразованные в JavaScript - включая array_diff

3
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: