WedX - журнал о программировании и компьютерных науках

Как сравнить два массива объектов и исправить одинаковые значения ключей?

Я искал, но не нашел именно того трюка, который мне нужен.

Я пытаюсь сравнить 2 массива объектов с одинаковыми ключами и обновить arr1, если значения в arr2 разные. Вот кодовая ручка, с которой можно поиграть.

let arr1 = [{val1: "dog", val2: "friendly"},{val1: "cat", val2: "fluffy"}]

let arr2 = [{val1: "cat", val2: "evil"},{val1: "mouse", val2: "tiny"},{val1: "hippo", val2: "big"}]

Ожидаемым результатом функции должно быть исправление объекта, включая val1:"cat" в arr1:

 {val1: "cat", val2: "fluffy"} ----->  {val1: "cat", val2: "evil"}

и обновленный arr1 должен вернуться следующим образом:

{val1: "dog", val2: "friendly"}, { val1: "cat", val2: "evil"}

Хитрость в том, что код также должен работать в обе стороны. Так, например, если в arr1 есть {val1: "большой", val2: "puma"}, он изменится на {val1: "big", val2: "бегемот"} путем замены "puma", поскольку значение "big" связан с «бегемотом» в обр.2.

Любые идеи о том, как этого добиться? Спасибо!


  • Вы просматривали npmjs.com/package/extend? 24.01.2020
  • Перебрать arr2 элементов. Для каждого элемента выполните цикл arr1 для элемента с тем же val1, если он найден: установите его значение равным значению элемента arr2. Для больших массивов это имеет некоторые накладные расходы, поэтому вы можете использовать другую структуру для arr1 (например, использовать val1 в качестве ключа), что, я думаю, сделает его намного проще. 24.01.2020
  • @Philip, как новичок, я немного озадачен тем, как там должен выглядеть синтаксис. Я думаю, может быть, использовать forEach? Но что именно должно быть во вложенном цикле? arr2.forEach(function(obj) { .... }) при попытке console.log(obj.val1) возникла неопределенная ошибка. 24.01.2020

Ответы:


1

Попробуйте функцию ниже - это удовлетворит в обоих случаях для arr1

function validateArray() {
        arr2.forEach(function(arr2Element) {
            arr1.forEach(function(arr1Element) {
                if (arr2Element.val1 === arr1Element.val1) {
                    arr1Element.val2 = arr2Element.val2;
                } else if (arr2Element.val2 === arr1Element.val1) {
                    arr1Element.val2 = arr2Element.val1;
                }
            });
        });
        console.log(arr1);
    }
24.01.2020

2

Перебрать элементы arr2. Для каждого элемента выполните цикл arr1 для элемента с тем же значением val1, если он найден: установите его значение равным значению элемента arr2.

let arr1 = [
    {
    val1: "dog",
    val2: "friendly"
  },
  {
    val1: "cat",
    val2: "fluffy"
  }
];

let arr2 = [{
  val1: "cat",
  val2: "evil"
},

{
  val1: "mouse",
  val2: "tiny"
},

{
  val1: "hippo",
  val2: "big"
}
];

function validate() {
  arr2.forEach(function(v2) {
     arr1.forEach(function(v, idx) {
      if (v2.val1 == v.val1) {
        console.log('Change', v.val2, 'to', v2.val2);
        arr1[idx].val2 = v2.val2;
      }
    });
  });
}
<button id="validate" onclick="validate()">
Validate
</button>

Для больших массивов это имеет некоторые накладные расходы, поэтому вы можете использовать другую структуру для arr1 (например, использовать val1 в качестве ключа), что, я думаю, сделает его намного проще.

24.01.2020
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]