Sta*_*y J 6 javascript foreach for-loop
我已经编写了一段工作正常的代码.我想要一个新的数组,该数组由来自myArr的元素按orderArr中指定的顺序组成.但是,它在另一个for循环中使用for循环来匹配数组元素.
var myArr = ['a', 'b', 'c', 'd', 'e'];
var orderArr = ['e', 'c'];
var reArr = [];
for (var i = 0; i < orderArr.length; i++) {
for (var k = 0; k < myArr.length; k++) {
if (myArr[k] == orderArr[i]) {
reArr.push(myArr[k]);
}
}
}
console.log(reArr);Run Code Online (Sandbox Code Playgroud)
我经常听说在另一个for循环中使用for循环是不好的做法,即使每个都应该避免.
我怎么能重写这段代码.
在您的情况下,嵌套循环的复杂度为O(n * m)-n的长度orderArr,m的长度myArr。
该解决方案的复杂性是O(N + M),因为我们使用创建字典对象阵列#减少与O(米)的复杂性,然后过滤该orderArray用O(n)的的复杂性。
注意1:对于小型阵列,这并不重要。因此,除非两个数组中都有数千个数组,否则您可以保留嵌套循环。
注意2:此代码假定中没有重复项myArr。如果存在重复项,则结果将与嵌套循环的结果不同。
var myArr = ['a', 'b', 'c', 'd', 'e'];
var orderArr = ['e', 'c'];
var myArrDict = myArr.reduce(function(r, s) {
r[s] = true;
return r;
}, Object.create(null));
var reArr = orderArr.filter(function(s) {
return this[s];
}, myArrDict);
console.log(reArr);Run Code Online (Sandbox Code Playgroud)