我有这两个数组
var refArray = ['India','Pakistan','Nepal','Bhutan','SreeLanka','Singapore','Thailand','China','Russia'] var beenThere = ['Russia','Bhutan','India']
beenThere为了显示目的,我需要按refArray的顺序进行排序,因此,如果我对sort进行排序beenThere,结果应该是,
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()快,但是排序是一个怪异的操作,为幕后优化提供了很多机会,因此结果可能会有所不同。