如何用javascript 位运算实现一个大数组的快速筛选?

新手上路,请多包涵

我这边需要的运用场景
10万个数组的过滤,过滤的过程非常多,所以想用位运算的方式来做,这个相当于无限嵌套的and & or,所以在当数据的某一行数据不满足条件时也不能删除,因为可能下一个或运算这个这一列又是需要显示。

// 此数组不是固定的,属性也不是固定
let value = [{a: 1, b:2}, {a: 3, b: 5}, {a: 2, b: 10}];
// 现在有一个无限递归的函数
// 比如
function (value) {
    for(let item of value){
        if(a > 2 && b  > 3 {
            // 下一个函数
            if(a > 5 || b < 5) {
        }
        }  
    }
 }

业务需求是用户自定义一个无限嵌套的条件编辑器实现对数据过滤筛选
核心需求就是一个1000-10万的数据不断的与或运算,直接for循环好像卡了一下,所以想用2进制的方式来做可能会快一下,望大佬指点一二,不胜感激

阅读 2.6k
5 个回答

直接 For 循环肯定会卡,因为 JavaScript 单线程,你一个 For 循环把资源占完,要跑多久就会卡多用,用啥办法都一样(顶多能快一点)

一般其他语言在处理这种事情的时候,都会在每次循环结束的时候进行一个 sleep,把资源让出来。但是 javascript 没这功能。但是可以用 setTimeout 来模拟这个功能,然后把循环体内的操作改为异步的。使用 await 从语法层面上来说改动不大。

示例

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

(async() => {
    for (int i = 0; i < 100000; i++) {
        console.log(i);
        await sleep(200);
    }
})();

思路在这,试试看吧

webworker吧

浏览器里用 Web Worker
nodejs 里用 Worker threads

搞个数据库吧,nedb,语法跟mongo一样的,比较简单

新手上路,请多包涵

这个不涉及到乘除啊,位运算里面感觉应该跟~有关

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏