В JavaScript пытаются создать словарь из 3-х объектов массива-сложный вопрос

В JavaScript пытаются создать словарь из 3-х объектов массива-сложный вопрос

25.12.2019 02:13:42 Просмотров 40 Источник

Я пытаюсь создать словарь с 3 различными массивами

myItems = ["Salt", "Pepper", "Oil", "Salt", "Pepper", "Oil", "Onion"]
myQuantities = [1, 1, 1, 2, 2, 2, 2]
myUnits =  ["gms", "gms", "kgs", "gms", "pound", "kgs", "pound"]

Также из приведенного выше примера я хочу удалить дубликат "Items", если "Units" одинаковы; т. е. соль повторяется дважды (1 gms и 2 gms), это должно быть { Salt: '3 gms'}

Если единицы измерения разные, то он должен быть повторен дважды, т. е. перец повторяется дважды с разными единицами (1 гм и 2 фунта), он должен быть {перец: '1 гм', перец: '2 фунта'}

Пример кода

myItems = ["Salt", "Pepper", "Oil", "Salt", "Pepper", "Oil", "Onion"]
myQuantities = [1, 1, 1, 2, 2, 2, 2]
myUnits =  ["gms", "gms", "kgs", "gms", "pound", "kgs", "pound"]

console.log(myItems);
console.log(myQuantities);
console.log(myUnits);
let final = Object.fromEntries(
    myItems.map((_, i) => [myItems[i], myQuantities[i].toString()+" "+myUnits[i]])
      );
console.log(final)

Current Result  = { Salt: '2 gms', Pepper: '2 pound', Oil: '2 kgs', Tes: '2 pound' }

Expected Result = { Salt: '3 gms', Pepper: '1 gms', Pepper: '2 pound', Oil: '3 kgs', Tes: '2 Onion' }

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105126392_59474068
Как правило, это хорошая идея-иметь хотя бы одно предложение, которое заканчивается или должно заканчиваться вопросительным знаком, внутри вопроса.
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105126521_59474068
Спасибо, пытаюсь редактировать, но это не позволяет
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105126522_59474068
Ожидаемый результат невозможен.
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105126539_59474068
Следует использовать что-то другое, чтобы получить этот результат вместо объекта.fromEntries ? есть какие-нибудь предложения ?
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105126544_59474068
У вас не может быть дубликатов ключей в объекте. Возможно, вам следует сделать значение каждого свойства массивом.
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105126564_59474068
Затем я должен преобразовать единицу измерения в общую единицу измерения и создать dict
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105128142_59474068
Это правда, @Barmar
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest#comment105144322_59474068
Ты собираешься это исправить?

Ответы - В JavaScript пытаются создать словарь из 3-х объектов массива-сложный вопрос / In JavaScript trying to create dictionary from 3 array objects - Challenge Question

Является ответом!
Barmar

25.12.2019 02:39:49

У вас не может быть дубликатов ключей в объекте. Поместите значения в массив.

const myItems = ["Salt", "Pepper", "Oil", "Salt", "Pepper", "Oil", "Onion"]
const myQuantities = [1, 1, 1, 2, 2, 2, 2]
const myUnits = ["gms", "gms", "kgs", "gms", "pound", "kgs", "pound"]

let final = {}
myItems.forEach((item, i) => {
  if (!final[item]) {
    final[item] = [];
  }
  final[item].push(myQuantities[i] + " " + myUnits[i]);
});
console.log(final)

https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest/59474171#comment105128152_59474171
Это не поможет, это будет два значения для ключа, лучший вариант для дубликата мне нужно скрыть единицу к общей единице и создать словарь
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest/59474171#comment105135804_59474171
Это вроде как не прямолинейно, достигается слишком большим количеством если и еще
https://stackoverflow.com/questions/59474068/in-javascript-trying-to-create-dictionary-from-3-array-objects-challenge-quest/59474171#comment105144355_59474171
Что делать, если нет общих единиц измерения? Хотя все ваши единицы измерения имеют вес, в реальных рецептах некоторые единицы измерения находятся в объеме, некоторые-в количестве.
Max Svid

25.12.2019 06:17:19

Я добился чего-то похожего, но без дубликатов ключей (с которыми вы можете справиться самостоятельно)

let myItems = ["Salt", "Pepper", "Oil", "Salt", "Pepper", "Oil", "Onion"]
let myQuantities = [1, 1, 1, 2, 2, 2, 2]
let myUnits =  ["gms", "gms", "kgs", "gms", "pound", "kgs", "pound"]

let x = myItems.reduce((newObj, entry, idx) =>{
if(!newObj[entry]){
  newObj[entry] = [myQuantities[idx], myUnits[idx]];
} else {
if(newObj[entry][1] == myUnits[idx]){
  newObj[entry] = [(newObj[entry][0] + myQuantities[idx]), myUnits[idx]];
} else {
  // should convert unit here or handle the case properly
}
}

return newObj;
}, {});

Object.keys(x).forEach(ele => x[ele] = x[ele][0] + ' ' + x[ele][1]);

console.log(x);

//result: {Salt: "3 gms", Pepper: "1 gms", Oil: "3 kgs", Onion: "2 pound"}
Помочь в развитии проекта:
Закрыть X