Я пытаюсь найти коды 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.
if (variantCodesObject.indexOf(ean)) для начала не имеет большого смысла, здесь вы будете сравнивать массив со скалярным значением.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать это, сравнив значение объекта в 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);
}
});
})
})Превосходно! У меня было что-то подобное, но я не собирал его, как вы. В любом случае спасибо за помощь!
Один из способов — использовать 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]);
});
Есть ли шанс, что вы могли бы изменить свой массив
variantCodesObject? Это может выглядеть так:[ { id: 261584049, ean: 7350038272416 }...]и тогда вы можете просто вернутьid.