Извлечение определенных значений из массива в объекте - PullRequest
1 голос
/ 10 апреля 2019

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

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

{Transmission: ['Manual', 12104, 'Automatic', 9858]}

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Если возможно, я рекомендую изменить поле 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, на который вы ссылаетесь, и при этом он не тестируется. # Пожав плечами

0 голосов
/ 10 апреля 2019

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.log(automatic);
console.log(manual);

// or

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

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