Перестановка и сопоставление элементов массива

Я пытаюсь упростить массив с помощью Javascript

[{
{name: orange,
quanity: 1},
{name: apple,
quanity: 3}
}]

Я хочу

[{
orange:1,
apple: 3
}]

я пытался

const keys = flat.map(item => {
            item.name = item.quanity
        })

Но я получаю

[ undefined, undefined ]

Спасибо!

почему вам нужен массив из 1 элемента вместо объекта. также ваш ввод не выглядит действительным. возможно Object.fromEntries(arr.map(e => [e.name,e.quanity]))

cmgchess 01.05.2023 18:29

Я пытаюсь упростить большие наборы данных для создания диаграмм с помощью D3.

crawlings 01.05.2023 18:36

Ваш пример объекта синтаксически недействителен. У вас что-то типа [{ {}, {} }] Возможно, внешние { } опечатка?

Wyck 01.05.2023 18:41
Поведение ключевого слова "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) для оценки ваших знаний,...
2
3
70
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Вы можете вернуть нужные пары ключ-значение в конечном объекте из обратного вызова map, а затем использовать Object.fromEntries для создания комбинированного объекта.

let arr=[{name:"orange",quanity:1},{name:"apple",quanity:3}];
let res = [Object.fromEntries(arr.map(o => [o.name, o.quanity]))];
console.info(res);

Похожее, но немного другое решение по сравнению с решением от Unmigititiated. Оба хороши и короткие.

let original = [
  {
    name: 'orange',
    quantity: 1
  },
  {
    name: 'apple',
    quantity: 3
  }
];

let simpler = original
  .map(item => ({ [item.name]: item.quantity }))
  .reduce((a, c) => Object.assign(a, c), {});

console.info(simpler);

а у этого другой формат?

cmgchess 01.05.2023 18:40

Каким путем? Вы хотите сказать, что я исправил написание количества?

Thomas Frank 01.05.2023 18:40

Нет, я имел в виду вместо одного объекта с несколькими реквизитами. это по-прежнему создает несколько объектов с одной опорой

cmgchess 01.05.2023 18:42

о, вы совершенно правы... отредактирую...

Thomas Frank 01.05.2023 18:43

но тогда массив не нужен? может это ошибка в вопросе?

Thomas Frank 01.05.2023 18:44

@ThomasFrank LOL, спасибо, я исправил это :)

crawlings 01.05.2023 18:44

Я отредактировал свое решение - все еще довольно короткое, но не такое короткое, как Unmitigated. :) Все хорошо. Кто бы ни отредактировал мой ответ, чтобы он работал, «запустите фрагмент кода» - спасибо, я буду помнить, что теперь буду использовать их для таких вопросов.

Thomas Frank 01.05.2023 18:49

зачем отображать, а потом уменьшать? просто уменьшить

pilchard 01.05.2023 22:25

Вы правы - это была бы одна из возможностей (здесь есть еще один ответ, который уже делает это. :) На самом деле я изначально неправильно понял вопрос, поскольку он был опубликован с массивом вокруг единственного объекта и создал несколько объектов, а затем просто быстро добавил редуктор исправить это... Так что не оптимально.

Thomas Frank 01.05.2023 22:29

Примечание. Данные, указанные в вопросе, не являются допустимым синтаксисом JavaScript.
Входные данные, указанные в вопросе, представляют собой массив объектов, где каждый объект представляет собой фрукт и соответствующее ему количество. Чтобы преобразовать этот ввод в желаемый вывод, вы можете использовать следующий код:

const arr = [
  { name: "orange", quantity: 1 },
  { name: "apple", quantity: 3 }
];

const ans = {};
arr.forEach(({ name, quantity }) => {
  ans[name] = quantity;
});

Этот код инициализирует пустой объект и затем перебирает каждый объект во входном массиве, используя метод forEach. Для каждого объекта он извлекает свойства имени и количества и добавляет их к объекту ans в виде пары ключ-значение.

Вот еще один способ, используя .reduce():

let original = [
  {
    name: 'orange',
    quantity: 1
  },
  {
    name: 'apple',
    quantity: 3
  }
];

let res = original.reduce((a,{name, quantity})=>(a[name]=quantity,a),{});

console.info(res);

Ваша структура входных данных недействительна. Вам нужно удалить лишние фигурные скобки и указать строковые значения (и, возможно, правильно написать «количество»). Итак, у вас осталось:

const arr = [
  { name: 'orange', quantity: 1 },
  { name: 'apple', quantity: 3 }
];

Есть несколько способов получить желаемый результат, но, возможно, самый простой — использовать цикл for..of для перебора массива. Затем вы можете использовать значения name и quantity для заполнения ключей/значений свойств выходного объекта. Если вы хотите, чтобы этот объект был единственным элементом в массиве, вы можете обернуть объект позже.

Примечание: поскольку мы не знаем, уникальны ли имена объектов, я добавил к данным дополнительный объект, чтобы вы могли увидеть, как это добавление работает в этом примере.

const arr = [
  { name: 'orange', quantity: 1},
  { name: 'apple', quantity: 3},
  { name: 'orange', quantity: 32 }
];

// Empty object
const out = {};

// Iterate over the array.
for (const obj of arr) {

  // Destructure the name/quantity propertied
  // from each object
  const { name, quantity } = obj;

  // If the key identified by the name doesn't
  // exist on the output object create it and
  // set it to zero. This means that it doesn't matter
  // if there is more than one object with the same name.
  // If there are post-first object this line of
  // code will be ignored.
  out[name] ??= 0;

  // Update the property value with the
  // quantity value.
  out[name] += quantity;
}

// Wrap the object in an array
// should you need to
console.info([out]);

Дополнительная документация

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