[英]Return matches from array if contains specific words
我有一個包含幾個國家的數組,后跟一個選項和一個數字。
0“UK One 150”
1“瑞士二十七”
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“英國兩個50”
你可以借助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);
您可以使用Schwartzian變換的形式通過提取國家/地區的名稱以及使用array.map()
和regex的數字來“裝飾”數據。
現在,您可以按國家/地區進行過濾,按數字排序,然后使用其他地圖提取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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.