Извлечение определенных значений из массива внутри объекта

Я настраиваю тест, чтобы убедиться, что граненый запрос Solr «содержимое» правильно отображается в элементе страницы с использованием javascript.

Результат запроса Solr, который я назвал «ryanlinkstransmissionpage», таков:

{ Трансмиссия: [ 'Ручной', 12104, 'Автоматический', 9858 ]}

Что я хотел бы сделать, так это извлечь только «Вручную» и «Автоматически», чтобы затем проверить, отображаются ли эти значения на странице.

Тем не менее, это больше функциональность, связанная с этим, которую я не могу понять, так как я буду использовать этот метод для других результатов запроса Solr.

Чтобы, возможно, все усложнить, этот результат запроса Solr «ryanlinkstransmissionpage» получен из динамического «живого» Solr, поэтому значения могут меняться каждый раз, когда он запускается (поэтому в этом массиве может быть больше или меньше значений, когда он тестируется на следующий день для пример).

Я пробовал несколько команд javascript, но безрезультатно.

JSON.parse(ryanlinkstransmissionpage)
JSON.stringify(ryanlinkstransmissionpage)
Object.values(ryanlinkstransmissionpage)

Любая помощь будет принята с благодарностью. Спасибо.

Что такое ryanlinkstransmissionpage? Объект или строка?

Jonas Wilms 10.04.2019 17:23

Какие "конкретные значения"? Все строки внутри «Передачи» или какой другой шаблон есть?

Jonas Wilms 10.04.2019 17:24

Я предполагаю, что страница ryanlinkstransmissionpage является множество в объект, но я основываю свое предположение только на том факте, что скобки [] содержатся в скобках {}.

Darren Harley 10.04.2019 23:36

Конкретные значения в этом случае, которые мне нужны, — это записи "Руководство" и «Автомат»Только. Хотя, как упоминалось в другом месте, эти конкретные значения являются динамическими, поэтому при следующем запуске запроса solr (откуда и берутся эти значения) значения «Вручную» или «Автоматически» могут отсутствовать (и другие значения могут присутствовать). Спасибо

Darren Harley 10.04.2019 23:37
Поведение ключевого слова "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) для оценки ваших знаний,...
1
4
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Если возможно, я настоятельно рекомендую изменить поле transmission на объект, а не на массив. Это даст вам гораздо больше возможностей для чтения данных внутри.

Игнорируя это, вы хотите извлечь значения string и значения number, которые следуют за ними? т.е. "Ручной" и "12104"? Или вы просто пытаетесь утверждать, что строковые значения присутствуют на странице?

В любом случае, вот два возможные подходы.

const ryanlinkstransmissionpage = { Transmission: [ 'Manual', 12104, 'Automatic', 9858 ] };
// Pull out the string values
const strngVals = ryanlinkstransmissionpage.Transmission.filter(val => typeof val === 'string');
// Pull out the string values and the numbers that follow
const strngNumVals = ryanlinkstransmissionpage.Transmission.reduce((keyVals, val, idx, srcArr) => {
  if (typeof val === 'string') keyVals[val] = srcArr[idx + 1];
  return keyVals;
}, {});

Подход сокращения — не стабильный и надежный к изменениям в данных, предоставленных из этого результата запроса Solr, на который вы ссылаетесь, и он не тестировался. #пожал плечами

Спасибо за ответ. В данном случае я хочу извлечь "Руководство" и Только "автомат" и нет числовые значения. Затем я смотрю на тестирование того, что «Ручной» и «Автоматический» отображаются в элементе на странице.

Darren Harley 10.04.2019 23:33

Хм, ладно, я попробовал const strngVals = ryanlinkstransmissionpage.Transmission.filter(val => typeof val === 'String'); и в результате получил пустой массив (то есть [] ). Спасибо.

Darren Harley 11.04.2019 00:02

Извините, глупо с моей стороны, это должно быть typeof val === 'string'. Note that string` нижний регистр, а не с заглавной буквы.

MrTibbles 11.04.2019 09:30

Большое спасибо. Я сейчас попробовал это, и это работает именно так, как я хотел. Большое, большое спасибо за вашу помощь :)

Darren Harley 11.04.2019 12:02

Рад, что смог помочь, ведь это командная игра +1

MrTibbles 11.04.2019 12:34

Javascript имеет встроенный метод под названием Array.prototype.find(() =>). Если вы просто хотите проверить, существует ли это значение, чтобы убедиться, что оно находится на странице, вы можете просто сделать:

const ryanlinkstransmissionpage = { Transmission: [ 'Manual', 12104, 'Automatic', 9858 ] };

const manual = ryanlinkstransmissionpage.Transmission.find((ele) => ele === 'Manual'); // returns 'Manual'

const automatic = ryanlinkstransmissionpage.Transmission.find((ele) => ele === 'Automatic'); // returns 'Automatic'
console.info(automatic);
console.info(manual);

// or

const findInArray = (arr, toFind) => {
  const result = arr.find((ele) => ele === toFind);
  return !!result;
}

console.info(findInArray(ryanlinkstransmissionpage.Transmission, 'Automatic')); // true
console.info(findInArray(ryanlinkstransmissionpage.Transmission, 'HelloWorld')); // false
console.info(findInArray(ryanlinkstransmissionpage.Transmission, 'Manual')); // true

Если вы просто хотите знать, содержит ли массив определенное значение, вы должны использовать Array#includes, а не Array#find: ryanlinkstransmissionpage.Transmission.includes('Manual').

Jordan Running 10.04.2019 22:39

Спасибо за ответ. Проблема в том, что «Ручной» и «Автоматический» не являются «фиксированными» значениями. Как упоминалось в моем вопросе, при следующем запуске моего запроса solr (откуда и берутся эти значения) может отсутствовать «Вручную» или «Автоматически», поэтому я не могу быть уверен, что массив содержит конкретный значения.

Darren Harley 10.04.2019 23:31

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