Объединение одного и того же конкретного объекта json в двух разных массивах json

1

Я хотел бы объединить один и тот же конкретный объект json на двух разных json-массивах, зависящих от идентификатора json-данных.

Набор данных JSON 1

{
    "Product":[
                {
                "product_id": "123",
                "location_id": "222",
                "product_code": "abc",
                },
                {
                "product_id": "456",
                "location_id": "111",
                "product_code": "xyz",
                }
            ]
}

Набор данных JSON 2

{
    "Location":[

            {
                "location_id": 111,
                "location_name": "alpha"
            },
            {
                "location_id": 222,
                "location_name": "tango"
            }


        ]
}

Результаты будут примерно такими

{
    "Product":[

                {
                    "product_id": "456",
                    "location_id": "111",
                    "product_code": "xyz",
                    "location_name": "alpha"
                },
                {
                    "product_id": "123",
                    "location_id": "222",
                    "product_code": "abc",
                    "location_name": "tango"
                }
            ]
}

Пока это код, который я сделал.

var finalJson = {};

                    _.each(_.keys(productArray,locationArray), function(key) {
                        finalJson[key] = _.flatten(_.zip(productArray[key], locationArray[key]));
                    });

                    console.log(finalJson);
  • 0
    извините обновил код
  • 0
    Да, результат объединения должен быть основан на том же самом местоположении.
Показать ещё 1 комментарий
Теги:
arrays

2 ответа

2
Лучший ответ

Простым алгоритмом может быть использование вложенных циклов для прохождения через оба массива, например:

let allProducts = [{
    "product_id": "123",
    "location_id": "222",
    "product_code": "abc",
  },
  {
    "product_id": "456",
    "location_id": "111",
    "product_code": "xyz",
  }
];


let allLocations = [

  {
    "location_id": 111,
    "location_name": "alpha"
  },
  {
    "location_id": 222,
    "location_name": "tango"
  }
];

let result = allProducts.map((product) => {
  let matchingLocation = allLocations.find((location) => {
    return location.location_id == product.location_id;
  });
  return Object.assign(product, matchingLocation);
})

console.log(result);
  • 1
    Спасибо, эта работа хорошо. Понравилась простота кода :)
1

Сделайте хэш-карту местоположений с использованием идентификатора местоположения в качестве ключей, затем выполните итерацию массива Product

let arr1 = {
  "Product": [{
    "product_id": "123",
    "location_id": "222",
    "product_code": "abc",
  }, {
    "product_id": "456",
    "location_id": "111",
    "product_code": "xyz",
  }]
}

let arr2 = {
  "Location": [
    {
      "location_id": 111,
      "location_name": "alpha"
    }, {
      "location_id": 222,
      "location_name": "tango"
    }
  ]
}
let locIds= _.keyBy(arr2.Location, 'location_id');
_.each(arr1.Product, (o) => _.assign(o, locIds[o.location_id]));

console.log(arr1.Product)
.as-console-wrapper{max-height:100%!important}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню