1

我正在设置一个测试,以确保使用 javascript 在页面元素中正确显示多面 Solr 查询“内容”。

我命名为“ryanlinkstransmissionpage”的 Solr 查询结果是:

{传输:['手动',12104,'自动',9858]}

我想做的只是提取“手动”和“自动”,然后我可以测试这些值是否显示在页面上。

但是,我无法理解其中涉及的更多功能,因为我将在其他 Solr 查询结果上使用此方法。

可能使事情复杂化的是,这个 Solr 查询结果“ryanlinkstransmissionpage”来自动态的“实时”Solr,因此每次运行时值可能会发生变化(因此在第二天测试时,该数组中可能会有更多或更少的值例子)。

我尝试了一些javascript命令,但无济于事。

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

任何帮助将不胜感激。谢谢。

4

2 回答 2

1

如果可能,我强烈建议将transmission字段更改为对象,而不是数组。这将使您具有更大的读取数据的能力。

忽略这一点,您是否希望提取string值和number它们后面的值?IE。“手动”和“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 查询结果提供的数据更改,reduce 方法不稳定或不稳健,也未经过测试。#耸耸肩

于 2019-04-10T15:56:50.947 回答
-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.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
于 2019-04-10T16:08:54.257 回答