如何使用匹配重新排列 JavaScript 数组?
Posted
技术标签:
【中文标题】如何使用匹配重新排列 JavaScript 数组?【英文标题】:How to rearrange JavaScript array using match? 【发布时间】:2015-11-16 17:08:49 【问题描述】:假设我们有一个 javascript 数组 arr
,其中每个 arr[i]
包含一个句子。现在如果我们要搜索包含特定字符串str
的句子,我们可以使用match
来查找这些句子,使用
var newarr = [];
for(var i = 0; i < arr.length; i++)
if(arr[i].toLowerCase().match(str.toLowerCase())
newarr[newarr.length] = arr[i];
新数组newarr
将仅包含包含字符串str
的句子。现在,有没有办法重新排列newarr
,使开头包含str
的句子排在第一位,然后是中间包含str
的句子,最后是包含str
的句子?
【问题讨论】:
【参考方案1】:Arrays 上可用的sort
方法可以采用自定义函数来比较元素并根据该函数进行排序。您的自定义排序函数需要接受两个参数,a
和 b
,并返回一个数字; a
和 b
是正在比较的数组元素。您的函数返回的数字告诉sort
函数是a
还是b
应该先出现,根据以下规则:
<0
,那么a
在b
之前
如果返回的数字是>0
,那么b
在a
之前
如果返回的数字是0
,那么a
和b
按顺序“相同”
所以要根据子字符串str
出现的位置对字符串数组进行排序,那么您可以执行以下操作:
var arr = ['bbbab', 'bbabbb', 'abbb', 'bbbba'];
// Our substring.
var str = 'a';
// Make copy of array.
var newarr = arr.slice()
// Sort.
newarr.sort(function (a, b)
return a.indexOf(str) - b.indexOf(str);
);
console.log(newarr); // => ["abbb", "bbabbb", "bbbab", "bbbba"]
【讨论】:
a
和 b
是要比较的数组元素。
有没有办法在排序时使用trim()
修剪每个数组元素?
abbb
、abbbb
、abbbbb
等这些应该怎么安排
@user3741635,“修剪”是什么意思?如果你愿意,你可以做一些事情newarr = arr.map(function(elt) return elt.trim(); );
。
都以a
开头,只是长度不同。 indexOf
将全部返回 0。根据我的说法,在对元素进行排序时也应该考虑长度【参考方案2】:
您忘记了 if 条件中的一个括号。
http://jsfiddle.net/pandeyaditya/LbwgfLvt/
检查以下代码:
var arr = ["JS is fun", "JS Rocks", "JS is for techies"];
var newarr = [];
var str = "fun";
for(var i = 0; i < arr.length; i++)
if(arr[i].toLowerCase().match(str.toLowerCase()))
newarr[newarr.length] = arr[i];
alert(newarr);
【讨论】:
以后,你可以只编辑问题来解决这样的小问题。以上是关于如何使用匹配重新排列 JavaScript 数组?的主要内容,如果未能解决你的问题,请参考以下文章