Возвращать совпадения из массива, если содержит определенные слова
У меня есть массив, который содержит несколько стран, за которыми следует опция и номер.
0 "UK One 150"
1 "Швейцария Два 70"
2 "Китай Два 120"
3 "Швейцария Один 45"
4 "Китай Один 90"
5 "UK Two 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 "Китай Два 120"
2 "Китай Один 90"
3 "UK Two 50"
3 ответа
Вы можете сделать это с помощью 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);
Вы можете отфильтровать массив, используя регулярное выражение, а затем отсортировать результат по числовому значению.
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);
Вы можете использовать форму преобразования Шварца, чтобы "украсить" данные, извлекая название страны и число, используя 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);