Я настраиваю тест, чтобы убедиться, что граненый запрос Solr «содержимое» правильно отображается в элементе страницы с использованием javascript.
Результат запроса Solr, который я назвал «ryanlinkstransmissionpage», таков:
{ Трансмиссия: [ 'Ручной', 12104, 'Автоматический', 9858 ]}
Что я хотел бы сделать, так это извлечь только «Вручную» и «Автоматически», чтобы затем проверить, отображаются ли эти значения на странице.
Тем не менее, это больше функциональность, связанная с этим, которую я не могу понять, так как я буду использовать этот метод для других результатов запроса Solr.
Чтобы, возможно, все усложнить, этот результат запроса Solr «ryanlinkstransmissionpage» получен из динамического «живого» Solr, поэтому значения могут меняться каждый раз, когда он запускается (поэтому в этом массиве может быть больше или меньше значений, когда он тестируется на следующий день для пример).
Я пробовал несколько команд javascript, но безрезультатно.
JSON.parse(ryanlinkstransmissionpage)
JSON.stringify(ryanlinkstransmissionpage)
Object.values(ryanlinkstransmissionpage)
Любая помощь будет принята с благодарностью. Спасибо.
Какие "конкретные значения"? Все строки внутри «Передачи» или какой другой шаблон есть?
Я предполагаю, что страница ryanlinkstransmissionpage является множество в объект, но я основываю свое предположение только на том факте, что скобки [] содержатся в скобках {}.
Конкретные значения в этом случае, которые мне нужны, — это записи "Руководство" и «Автомат»Только. Хотя, как упоминалось в другом месте, эти конкретные значения являются динамическими, поэтому при следующем запуске запроса solr (откуда и берутся эти значения) значения «Вручную» или «Автоматически» могут отсутствовать (и другие значения могут присутствовать). Спасибо
Если возможно, я настоятельно рекомендую изменить поле 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, на который вы ссылаетесь, и он не тестировался. #пожал плечами
Спасибо за ответ. В данном случае я хочу извлечь "Руководство" и Только "автомат" и нет числовые значения. Затем я смотрю на тестирование того, что «Ручной» и «Автоматический» отображаются в элементе на странице.
Хм, ладно, я попробовал const strngVals = ryanlinkstransmissionpage.Transmission.filter(val => typeof val === 'String'); и в результате получил пустой массив (то есть [] ). Спасибо.
Извините, глупо с моей стороны, это должно быть typeof val === 'string'. Note that
string` нижний регистр, а не с заглавной буквы.
Большое спасибо. Я сейчас попробовал это, и это работает именно так, как я хотел. Большое, большое спасибо за вашу помощь :)
Рад, что смог помочь, ведь это командная игра +1
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')
.
Спасибо за ответ. Проблема в том, что «Ручной» и «Автоматический» не являются «фиксированными» значениями. Как упоминалось в моем вопросе, при следующем запуске моего запроса solr (откуда и берутся эти значения) может отсутствовать «Вручную» или «Автоматически», поэтому я не могу быть уверен, что массив содержит конкретный значения.
Что такое
ryanlinkstransmissionpage
? Объект или строка?