簡體   English   中英

如果包含特定單詞,則從數組返回匹配項

[英]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

我所做的是首先過濾包含UKChina所有元素。

現在在這個已過濾的數組上,我需要使用正則表達式捕獲數字並按降序對它們進行排序。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM