从对象内的数组中提取特定值

时间:2019-04-10 15:21:04

标签: javascript arrays object nightwatch.js solrclient

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

我将Solr查询结果命名为“ ryanlinkstransmissionpage”;

{变速器:['Manual',12104,'Automatic',9858]

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

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

为了使事情复杂化,此Solr查询结果“ ryanlinkstransmissionpage”来自动态的“实时” Solr,因此每次运行时值可能都会更改(因此,在数组上进行测试时,此数组中可能会有更多或更少的值)例如第二天)。

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

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

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

2 个答案:

答案 0 :(得分:1)

如果可能,我会建议将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查询结果提供的数据更改,不稳定或不稳定,也未经过测试。 #耸肩

答案 1 :(得分:-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