【发布时间】:2018-08-16 23:21:37
【问题描述】:
我有以下代码应该从不包含在另一个常量数组中的所有元素中过滤一个动态数组(最多 30 万个元素):
orders[] // is already filled with data
let materials = [] // create empty array
for (let scheme in schemes) { // loop constant object
materials.push(schemes[scheme].typeID) // take id and add it to materials array
}
materials = Array.from(new Set(materials)) // filter out duplicates
console.log(materials) // everything looks fine here, 83 unique ids
for (let order in orders) { // now loop the main array
if (!materials.includes(orders[order].type_id)) { // if order's containment id is not found in materials array
orders.splice(order,1) // remove it from array
order -= 1 // and one step back to compensate removed index (do I need it or is it processed normally even after .splice?)
}
}
// and send filtered orders into browser when certain url is requested
然而并不是所有不必要的记录都被过滤掉了,有很多很多他们的id在材料数组中找不到。
我的错误是什么,错误在哪里?
【问题讨论】:
-
你可能想看看Array.prototype.filter()
-
你知道Array查找是O(n),Set查找是O(1)
-
.. 并且永远不要使用
let scheme in schemes遍历数组... -
@str 不,不是。
-
@JonasW。这次迭代有什么问题?
标签: javascript arrays node.js