返回超过X es6的所有键的最佳方法

时间:2017-07-15 21:43:16

标签: javascript arrays performance object ecmascript-6

我有一个按键排序为asc的对象。

{
0: {},
4: {},
85: {},
266: {},
}

我希望获得所有按键的键> X(= 50)。

在这种情况下它将返回

{

    85: {},
    266: {},
}

我希望它具有高效性,因为我每500毫秒使用超过100个键进行此操作

3 个答案:

答案 0 :(得分:2)

最简单,es6:

let obj = ...;

let keys = Object.keys(obj).filter(i => (parseInt(i) || 0) >= 50);

答案 1 :(得分:1)

尝试使用for..in循环。

速度测试:https://jsperf.com/forinvsfilter

const obj = {
  0: {},
  4: {},
  85: {},
  266: {},
};

let res = {};

for (let r in obj) {
  if (r > 50) {
    res[r] = obj[r];
  }
}

console.log(res);

答案 2 :(得分:1)

当你经常运行这个时,如果我们假设值只是在改变没有新的密钥引入/删除,那么我们可以找到那些按照标准配对的密钥,当它不匹配的那一刻我们就会破坏执行,我们走了:

var obj = {
  0: {},
  4: {},
  85: {},
  266: {},
};
var keys = Object.keys(obj).sort((a,b)=>a>b); //basically we are caching the keys

并在每个时间间隔

var res = {};
var x = 50; // whatever it is
var idx;
for(idx=keys.length-1;idx>=0;idx--) {
    var key = keys[idx];
    if(key>x) {
        res[key] = obj[key];
    } else {break;} //and here is the magic
}