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

Extracting specific values from an array within an object

我正在设置测试以确保分面 Solr 查询 'contents' 使用 javascript 在页面元素中正确显示。

我命名为 "ryanlinkstransmissionpage" 的 Solr 查询结果是;

{ 传输:[ 'Manual', 12104, 'Automatic', 9858 ] }

我想做的是只提取 'Manual' 和 'Automatic',这样我就可以测试这些值是否显示在页面上。

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

为了可能使事情复杂化,这个 Solr 查询结果 "ryanlinkstransmissionpage" 来自动态 'live' Solr,因此每次 运行 时值可能会改变(因此可能有更多或例如,在第二天进行测试时,此数组中的值较少。

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

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

如有任何帮助,我们将不胜感激。谢谢

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

忽略这一点,您是否要提取 string 值和跟随它们的 number 值? IE。 "Manual" 和“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;
}, {});

reduce 方法对您引用的此 Solr 查询结果提供的数据变化不稳定或鲁棒,也未经过测试。 #耸肩

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