Return 如果包含特定单词,则从数组中匹配
Return matches from array if contains specific words
我有一个包含几个国家的数组,后跟一个选项和一个数字。
0 " 英国一号 150 "
1 " 瑞士二 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
我想用这个数组做的是整理 return 只有匹配项。例如。我想 return 只有英国和中国,所以数组看起来像这样。
0 " 英国一号 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 transform to "decorate" the data by extracting the name of the country, and the number using a array.map()
和正则表达式的形式。
现在您可以按国家过滤,按数字排序,并使用另一个地图提取海峡。
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 " 英国一号 150 "
1 " 瑞士二 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
我想用这个数组做的是整理 return 只有匹配项。例如。我想 return 只有英国和中国,所以数组看起来像这样。
0 " 英国一号 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 transform to "decorate" the data by extracting the name of the country, and the number using a array.map()
和正则表达式的形式。
现在您可以按国家过滤,按数字排序,并使用另一个地图提取海峡。
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);