是否有ES6方法在数组中搜索具有来自另一个数组的元素的元素?

时间:2019-08-21 10:34:15

标签: javascript arrays

我有两个包含一些参数值的数组。数组中的所有元素都是字符串,如下所示:

x = [ "vorzugsreihe=J", "nennleistung=94,1127", "nenndrehzahl=31,9400"]
y = ["nenndrehzahl=500,3000"]

预期输出为:

x = [ "vorzugsreihe=J", "nennleistung=94,1127", "nenndrehzahl=500,3000"]

我尝试使用Array.Filter,但似乎无法仅进行部分过滤(例如以字符串开头而不是整个字符串开头,因为值不一样,因此无法匹配)。

我想要的是能够遍历数组Y中的每个元素,并搜索数组X中是否存在element(“ =”之前的字符串)并替换value( s)在数组X中的元素。

6 个答案:

答案 0 :(得分:1)

WebElement text = driver.findElement(By.xpath("//input[@id='text']"));
System.out.println("text= " +text.getAttribute("placeholder"));

尝试一下。这样就可以使用RegEx,并且不容易出错。

答案 1 :(得分:0)

您可以使用Mapmap

  • 首先从数组y创建一个Map,用=分割每个元素,将第一部分用作键,第二部分用作值
  • 遍历x数组,将每个元素除以=,并使用第一部分作为关键字在Map中进行搜索(如果当前存在来自Map的使用值,则返回无任何值)更改

let x = ["vorzugsreihe=J", "nennleistung=94,1127", "nenndrehzahl=31,9400"]
let y = ["nenndrehzahl=500,3000"]

let maper = new Map(y.map(v => {
  let [key, value] = v.split('=', 2)
  return [key, value]
}))

let final = x.map(v => {
  let [key, value] = v.split('=', 2)
  if (maper.has(key)) {
    return key + '=' + maper.get(key)
  }
  return v
})

console.log(final)

答案 2 :(得分:0)

尝试一下:

y.forEach(item => {
  const str = item.split("=")[0];
  const index = x.findIndex(el => el.startsWith(str));
  if (index) {
    const split = x[index].split('=');
    x[index] = `${split[0]}=${split[1]}`;
  }
})

答案 3 :(得分:0)

对于y数组中的每个值,迭代并检查x数组中是否存在该单词。找到匹配项后,只需更新值即可。 (以下解决方案会更改原始数组)

const x = [ "vorzugsreihe=J", "nennleistung=94,1127", "nenndrehzahl=31,9400"],
      y = ["nenndrehzahl=500,3000"],
      result = y.forEach(word => {
        let [str, number] = word.split('=');
        x.forEach((wrd,i) => {
          if(wrd.split('=')[0].includes(str)) {
            x[i] = word;
          }
        });
      });
console.log(x);

答案 4 :(得分:0)

我建议结合使用reduce + find-这会累积并为您提供预期的结果。

var x = [ "vorzugsreihe=J", "nennleistung=94,1127", "nenndrehzahl=31,9400"]
var y = ["nenndrehzahl=500,3000"]

var combinedArr = x.reduce((acc, elem, index) => {
  const elemFoundInY = y.find((yElem) => yElem.split("=")[0] === elem.split("=")[0]);
  if (elemFoundInY) {
    acc = [...acc, ...[elemFoundInY]]
  } else {
    acc = [...acc, ...[elem]];
  }
  return acc;
}, [])

console.log(combinedArr);

答案 5 :(得分:0)

您可以使用.startsWith()来检查元素是否以key=开头,然后替换其值:

let x = [ "vorzugsreihe=J", "nennleistung=94,1127", "nenndrehzahl=31,9400"];
let y = ["nenndrehzahl=500,3000"];

y.forEach(val => {
  let [key, value] = val.split("=");
  for (let i = 0; i < x.length; i++) {
    if (x[i].startsWith(`${key}=`)) x[i] = `${x[i].split("=")[0]}=${value}`;
  }
})

console.log(x)