как конвертировать несколько объектов в один массив - PullRequest
0 голосов
/ 11 октября 2018

Может кто-нибудь, пожалуйста, помогите мне с кодом, у меня есть два массива, один с идентификатором продукта_, а другой с подробной информацией о продукте. Мне удалось выполнить поиск в массиве product_id и отобразить детали из сведений о продукте.то, что я хочу сделать, это узнать, что найден один элемент, который должен возвращаться как один массив, пожалуйста, просмотрите мой код и посмотрите, о чем я говорю.если кто-то может помочь мне объединить результат в массив

введите описание изображения здесь

var product_id = [{
    "order_id": "281774",
    "product_id": "203751",

  },
  {
    "order_id": "281774",
    "product_id": "198999",

  },
  {
    "order_id": "281774",
    "product_id": "199291",

  },

  {
    "order_id": "281774",
    "product_id": "256156",

  }
];

var product_details = [{
    "id": "219",
    "product_id": "198999",
    "sku": "20148089",
    "prod_name": "Chocolate Mousse 1L",

    "price": "39.99"
  },
  {
    "id": "220",
    "product_id": "199291",
    "sku": "20008307",
    "prod_name": "Medium Carrots 500g",

    "price": "9.99"
  },
  {
    "id": "221",
    "product_id": "2047590",
    "sku": "6009207908908",
    "prod_name": "Fresh Spicy Lentil & Vegetable Soup 600g",
    "price": "39.59"
  },
  {
    "id": "222",
    "product_id": "1990150",
    "sku": "6009182131643",
    "prod_name": "Bulk Gouda Cheese 900g",
    "price": "77.62"
  },
  {
    "id": "249",
    "product_id": "2000510",
    "sku": "6009195203320",
    "prod_name": "Salted Butter 500g",
    "price": "76.95"
  }

]
let e;
product_id.forEach(prod => {
  if (prod) {
    product_details.forEach(detail => {
      if (detail && detail.product_id === prod.product_id) {
        console.log(detail);
        e = detail;
      }
    })
  }
});

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете сделать e массив и отправить его, но вы хотите использовать декларативные методы , чтобы создать новый массив по двум причинам:

  • Это проще для понимания поскольку базовая логика абстрагируется от таких функций, как map(), reduce(), filter() и т. д.
  • В некоторых случаях, например, когда вы изменяете переменную, недопустимодля выполнения асинхронных операций необходимо передать функцию обратного вызова.

Вы можете использовать Array.prototype.map() и Array.prototype.filter() для создания нового массива на основе исходного, например:

let product_id = [{ "order_id": "281774", "product_id": "203751" }, { "order_id": "281774", "product_id": "198999" }, { "order_id": "281774", "product_id": "199291" }, { "order_id": "281774", "product_id": "256156" }];
let product_details = [{ "id": "219", "product_id": "198999", "sku": "20148089", "prod_name": "Chocolate Mousse 1L", "price": "39.99" }, { "id": "220", "product_id": "199291", "sku": "20008307", "prod_name": "Medium Carrots 500g", "price": "9.99" }, { "id": "221", "product_id": "2047590", "sku": "6009207908908", "prod_name": "Fresh Spicy Lentil & Vegetable Soup 600g", "price": "39.59" }, { "id": "222", "product_id": "1990150", "sku": "6009182131643", "prod_name": "Bulk Gouda Cheese 900g", "price": "77.62" }, { "id": "249", "product_id": "2000510", "sku": "6009195203320", "prod_name": "Salted Butter 500g", "price": "76.95" }]

let product_id_only = product_id.map(id => id.product_id);
let result = product_details.filter(detail => product_id_only.includes(detail.product_id));
console.log(result);

Объяснение кода:

product_id_only определяется функцией map(), которая создает новый массив на основе возвращаемых значений обратного вызова, предоставленного, учитывая каждый элемент в массиве в качестве параметра.Поскольку обратный вызов получает параметр id и возвращает id.product_id, новый массив состоит только из строк product_id.

result вычисляется с помощью функции filter(), которая передает каждый элементмассив и получает логическое значение в качестве возвращаемого значения.В этом случае product_id_only.includes(detail.product_id) является возвращаемым значением, которое истинно, когда detail 'product_id включено в ранее созданный массив с map().

Надеюсь, это поможет!

0 голосов
/ 11 октября 2018

e должен быть массивом, и когда вы найдете совпадение, вы должны push к этому массиву:

var product_id=[{order_id:"281774",product_id:"203751"},{order_id:"281774",product_id:"198999"},{order_id:"281774",product_id:"199291"},{order_id:"281774",product_id:"256156"}],product_details=[{id:"219",product_id:"198999",sku:"20148089",prod_name:"Chocolate Mousse 1L",price:"39.99"},{id:"220",product_id:"199291",sku:"20008307",prod_name:"Medium Carrots 500g",price:"9.99"},{id:"221",product_id:"2047590",sku:"6009207908908",prod_name:"Fresh Spicy Lentil & Vegetable Soup 600g",price:"39.59"},{id:"222",product_id:"1990150",sku:"6009182131643",prod_name:"Bulk Gouda Cheese 900g",price:"77.62"},{id:"249",product_id:"2000510",sku:"6009195203320",prod_name:"Salted Butter 500g",price:"76.95"}];

let e = [];
product_id.forEach(prod => {
  product_details.forEach(detail => {
    if (detail.product_id === prod.product_id) {
      e.push(detail);
    }
  })
});

console.log(e);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...