Избегайте того же объекта в существующей угловой модели

Пытаясь объединить два массива с некоторыми одинаковыми вхождениями в два массива, вот что я сделал

var json_dest = [
    {
        "legID":"12121",
    "message":212112
    },
  {
    "legID":"12122",
    "message":212112
  }
];
var json_src = [
        {
        "legID":"12121",
    "message":212100
    },
  {
    "legID":"12123",
    "message":212112
  }
];

console.log(angular.merge(json_dest, json_src));

выход:

[
   {
     "legID":"12121",
     "message":212100
   },
   {
     "legID":"12123",
     "message":212112
   }
]

это объединило дубликаты
но мне не хватает другого legID "12123"
Мне нужно знать, как это можно сделать эффективно?
а также почему это происходит?

2 ответа

Решение

angular.merge используется не для объединения массивов, а для глубокого расширения целевого объекта перечислимыми свойствами исходного объекта:

Глубоко расширяет целевой объект dst, копируя собственные перечисляемые свойства из объектов src в dst. Вы можете указать несколько объектов src. Если вы хотите сохранить исходные объекты, вы можете сделать это, передав пустой объект в качестве цели: var object = angular.merge({}, object1, object2) Источник

Если вы просто хотите объединить два массива в один, вам не нужен угловой API для этого. Просто используйте concat:

json_dest = json_dest.concat(json_src);

Если вы хотите удалить дубликаты определенным свойством, например, legID в вашем случае, вы можете сделать это после объединения массивов. Есть много ресурсов о том, как это сделать. Смотрите, например, этот вопрос: Удалить дубликаты из массива объектов в JavaScript

Синтаксис для слияния

var object = angular.merge({}, obj1, obj2); 

это показывает только второй элемент

попробуйте использовать

console.log(angular.merge(dst, src1, src2));
Другие вопросы по тегам