Javascript в массиве, затем возвращаемый ключ

Я пытаюсь найти коды ean снизу в массиве variantCodesObject. Эту часть я могу заставить работать, но я изо всех сил пытаюсь вернуть key из variantCodesObject.

cart array
[
  {"ean": "7350038272416","quantity": 1},
  {"ean": "7350038270276","quantity": 3}
]


variantCodesObject array

[
 { 261584049: "7350038272416" },
 { 261583813: "7350038274120" },
 { 261583424: "7350038270276" },
 { 261122928: "210000018685" },
]

cart.forEach(function (cartItem){    
  var ean = cartItem.ean;
  var qty = cartItem.quantity;

  if (variantCodesObject.indexOf(ean)){
    
    makeSomeRequest(??, qty) //How do I get the key of the found EAN's here?

  }

})

Как в приведенном выше примере получить для ean 7350038272416 значение ключа 261584049?

Я пробовал что-то вроде этого:

variantCodesObject.forEach(function(item){
          if (item.indexOf(ean)){
            Object.keys(item).forEach(function(key) {
              console.info("key:" + key + "value:" + item[key]);
            });
          }
        });

Но это возвращает полный variantCodesObject.

Есть ли шанс, что вы могли бы изменить свой массив variantCodesObject? Это может выглядеть так: [ { id: 261584049, ean: 7350038272416 }...] и тогда вы можете просто вернуть id.

Andy 09.05.2022 16:23
if (variantCodesObject.indexOf(ean)) для начала не имеет большого смысла, здесь вы будете сравнивать массив со скалярным значением.
CBroe 09.05.2022 16:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете сделать это, сравнив значение объекта в variantCodesObject со свойством .ean для каждого элемента корзины. Если он совпадает, делайте с ключом все, что хотите.

cart = [
  {"ean": "7350038272416","quantity": 1},
  {"ean": "7350038270276","quantity": 3}
]


variantCodesObject = [
 { 261584049: "7350038272416" },
 { 261583813: "7350038274120" },
 { 261583424: "7350038270276" },
 { 261122928: "210000018685" },
]


cart.forEach(item => {
  variantCodesObject.forEach(obj => {
    Object.entries(obj).forEach(([key, value]) => {
      if (value === item.ean) {
        console.info(key);
      }
    });
  })
})

Превосходно! У меня было что-то подобное, но я не собирал его, как вы. В любом случае спасибо за помощь!

Meules 09.05.2022 21:23

Один из способов — использовать Array.reduce() для сбора данных из массива:

const cart =
[
  {"ean": "7350038272416","quantity": 1},
  {"ean": "7350038270276","quantity": 3}
]


const variantCodesObject =
[
 { 261584049: "7350038272416" },
 { 261583813: "7350038274120" },
 { 261583424: "7350038270276" },
 { 83424: "7350038270276" },
 { 261122928: "210000018685" },
]

cart.forEach(function (cartItem){    
  var ean = cartItem.ean;
  var qty = cartItem.quantity;

  const keys = variantCodesObject.reduce((ret, obj) =>
  {
    for(let key in obj)
      if (obj[key] == ean)
        ret[ret.length] = key;

    return ret;
  }, []);

  console.info(ean, " = ", keys);

})

Вы можете создать «таблицу обратного поиска». Вот как вы можете это сделать.

var cartArray = [
  { ean: '7350038272416', quantity: 1 },
  { ean: '7350038270276', quantity: 3 },
];

var variantCodesObjectArray = [
  { 261584049: '7350038272416' },
  { 261583813: '7350038274120' },
  { 261583424: '7350038270276' },
  { 261122928: '210000018685' },
];

// We are creating a lookup / dictionary by mapping the "EAN" to the "CODE"
var reverMappedCodesObjectArray = {};

variantCodesObjectArray.forEach(function (entry) {
  var key = Object.keys(entry)[0];
  reverMappedCodesObjectArray[entry[key]] = key;
});

cartArray.forEach(function (cartItem) {
  var ean = cartItem.ean;
  var qty = cartItem.quantity;

  console.info(reverMappedCodesObjectArray[ean]);
});

Другие вопросы по теме