Возвращать совпадения из массива, если содержит определенные слова - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть массив, который содержит несколько стран, за которыми следует опция и номер.

0 "UK One 150"

1 "Switzerland Two 70"

2"Китай два 120"

3 "Швейцария один 45"

4 "Китай один 90"

5 "Великобритания два 50"

Вот какЯ получаю массив, используя xpath:

    var iterator = document.evaluate('//xpath/li[*]', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

try {
  var thisNode = iterator.iterateNext();
  var arrayList = [];

  while (thisNode) {
    arrayList.push(thisNode.textContent); 
    thisNode = iterator.iterateNext();
  }

  for (var i = 0; i < arrayList.length; i++) {
    console.log(arrayList[i]);
  }   
} catch (e) {
  dump('Error' + e);
}
arrayList

Что я хотел бы сделать с этим массивом, так это отсортировать и вернуть только совпадения.Например, я хотел бы, чтобы он возвращал только Великобританию и Китай, поэтому массив будет выглядеть следующим образом.

0 "UK One 150"

1 "China Two 120"

2 "China One 90"

3 "UK Two 50"

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Вы можете отфильтровать массив, используя регулярное выражение, а затем отсортировать результат по числовому значению.

let data =["UK One 150 ","Switzerland Two 70 ","China Two 120 ","Switzerland One 45 ","China One 90 ","UK Two 50 "],
  result = ((arr) => data.filter(s => new RegExp(arr.join('|'), 'ig').test(s)))(['UK', 'China'])
          .sort((a,b)=> +a - +b);
console.log(result);
0 голосов
/ 13 декабря 2018

Вы можете использовать форму преобразование Шварца , чтобы «украсить» данные, извлекая название страны и число, используя array.map() и регулярное выражение.

Теперь вы можете фильтровать по стране, сортировать по номеру и извлекать str, используя другую карту.

const arr =[
"UK One 150 ",
"Switzerland Two 70 ",
"China Two 120 ",
"Switzerland One 45 ",
"China One 90 ",
"UK Two 50 ",
];

const pattern = /^(\S+)\D+(\d+)/;
const requestedCounteries = new Set(['UK', 'China']);

const result = arr
  .map(str => str.match(pattern)) // ['UK One 150 ', 'UK', '150']
  .filter(([,country]) => requestedCounteries.has(country))
  .sort(([,,a], [,,b]) => +b - +a)
  .map(([str]) => str);
 
console.log(result);
0 голосов
/ 13 декабря 2018

Вы можете сделать это так с помощью sort() filter() и regex

Сначала я отфильтровал все элементы, которые содержат либо UK, либоChina.

Теперь в этом фильтрованном массиве мне нужно захватить число с помощью регулярных выражений и отсортировать их в порядке убывания.

let arr =[
"UK One 150 ",
"Switzerland Two 70 ",
"China Two 120 ",
"Switzerland One 45 ",
"China One 90 ",
"UK Two 50 ",
];

let op = arr.filter(e=> 
    /(UK|China)/gi.test(e))
   .sort((a,b)=>{a.match(/\d+/g) - b.match(/\d+/g)}
 );
 
console.log(op);
...