Извлечение всех значений из массива объектов на основе значения ключей

Если у меня есть массив, который выглядит следующим образом:

[{"matchedKey":"cuisineType","cuisineType":"Indian","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"Italian","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"Asian","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"Japanese","group":"group"},
 {"matchedKey":"cuisineType","cuisineType":"African","group":"group"}]

Как я могу отсортировать это по типу кухни?

Я пробовал использовать:

var result = array.find(obj => {
var go =  obj.cuisineType
console.info(String(obj.cuisineType))
})

Однако я не могу понять, как:

  1. Поместите его в одну строку с командой, разделяющей результаты (они просто выводятся на консоль по отдельности).

  2. используйте строку, которую я только что сделал, поскольку console.info(go) или console.info(result) печатает undefined.

Заранее спасибо за помощь! Я пробовал другие предложения по SO и не только, но без особого успеха!

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

Ответы 5

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

Проще всего было бы использовать map() для создания множества кухонь. Затем вы можете перебрать его или построить из него строку по мере необходимости.

var arr = [{"matchedKey":"cuisineType","cuisineType":"Indian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Italian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Asian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Japanese","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"African","group":"group"}]

var cuisines = arr.map(function(el) {
  return el.cuisineType;
});

console.info(cuisines); // array
console.info(cuisines.join(', ')); // formatted string

Еще короче, поместите: el => el.cuisineType в вашу функцию карты

Treycos 17.12.2018 13:35

@Treycos, это правда, но будьте осторожны со стрелочными функциями, так как они вообще не работают ни в одной версии IE.

Rory McCrossan 17.12.2018 14:52

Использование функции карта

const cuisineTypes = [{
    "matchedKey": "cuisineType",
    "cuisineType": "Indian",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "Italian",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "Asian",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "Japanese",
    "group": "group"
  },
  {
    "matchedKey": "cuisineType",
    "cuisineType": "African",
    "group": "group"
  }
];

const result = cuisineTypes.map(x => x.cuisineType);

console.info(JSON.stringify(result, null, 4));

Просто .map() в новом массиве касаемо кухонь. Затем делайте с этими данными все, что хотите:

var arr = [{"matchedKey":"cuisineType","cuisineType":"Indian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Italian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Asian","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"Japanese","group":"group"},
  {"matchedKey":"cuisineType","cuisineType":"African","group":"group"}];

var sortedArr = arr.map(e => e.cuisineType);
console.info(sortedArr);

Если вы новичок в Javascript, но раньше использовали любые другие языки программирования, это может быть более простым, но не эффективным способом решения вашей текущей головоломки. Я написал каждый шаг js с соответствующими комментариями для удобства чтения и понимания каждого шага.

/****** COMMENT *******
Declaring the original array as arr
*********************/

var arr = [
        {
         matchedKey:"cuisineType",
         cuisineType:"Indian",
         group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"Italian",
            group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"Asian",
            group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"Japanese",
            group:"group"
        },

        {
            matchedKey:"cuisineType",
            cuisineType:"African",
            group:"group"
        }
     ];

/****** COMMENT *******
Declaring a new empty array
*******************/

var newArray = [];

/****** COMMENT *******
array.push() method adds one or more elements to the end of an array.
So, I'm appending values of key - cuisineType - in the empty array named newArray (see above).
*******************/

for (var i = 0; i < arr.length; i++){

/****** COMMENT *******
Through this for loop, 'i' will point as index value to each individual object within an array starting from 0 up to the (length of an array - 1) ==> in your case, 5 - 1 = 4.
*******************/

newArray.push(arr[i].cuisineType);

}

/****** COMMENT *******
join() method creates and returns a new string by concatenating all of the elements in an array
*******************/

console.info(newArray.join(', '));

Вывод в вашем console.info будет

Indian, Italian, Asian, Japanese, African

Надеюсь, это то, что вы искали. Хорошего дня.

С немного ES6:

  function extractArrayFromKey(ArrayOfObjects,WantedKey){
     return ArrayOfObjects(obj => {
       let val = null;
       Object.entries(obj).forEach(([key,value]) => {if (key==WantedKey) val=value});
       return val
    })
  }

 const newArray = extractArrayFromKey(arr,'cuisineType') 

 -> ["Indian", "Italian", "Asian", "Japanese", "African"]

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