我有这两个数组
var refArray = ['India','Pakistan','Nepal','Bhutan','SreeLanka','Singapore','Thailand','China','Russia']
var beenThere = ['Russia','Bhutan','India']
beenThere
为了显示目的,我需要按refArray的顺序进行排序,因此,如果我对sort进行排序beenThere
,结果应该是,
['India','Bhutan','Russia']
在哪里可以获得一种算法。
由于数据是字符串,并且字符串没有逗号,因此可以使用动态RegExp避免所有用户域迭代:
var refArray = ['India','Pakistan','Nepal','Bhutan','SreeLanka','Singapore','Thailand','China','Russia']
var beenThere = ['Russia','Bhutan','India'];
(","+refArray+",").match(RegExp(",("+beenThere.join("|")+"),","g")).join(",").split(/,+/).slice(1,-1);
// == ["India", "Bhutan", "Russia"]
这样做很不错,因为它不需要[] .indexOf(),因此可以在较旧的浏览器中使用。如果数据有逗号,则可以使用除逗号以外的其他分隔符,并带有一些较难看的代码...
或者,使用过滤器进行迭代,但使用本机方法而不是用户界面函数:
var refArray = ['India','Pakistan','Nepal','Bhutan','SreeLanka','Singapore','Thailand','China','Russia']
var beenThere = ['Russia','Bhutan','India'];
refArray.filter(/./.test, RegExp("("+beenThere.join("|")+")","g"));
// == ["India", "Bhutan", "Russia"]
它们的执行速度可能比indexOf()快,但是排序是一个怪异的操作,为幕后优化提供了很多机会,因此结果可能会有所不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句