如何生成一个未使用的任意对象属性?

时间:2017-03-16 19:13:10

标签: javascript function hash hashmap

我有一个绑定函数f

var f = someFunction.bind(this);

不是将f传递给函数,而是将其保存在对象中,而是将id传递给f

var obj = {};
var nextID = Object.keys(obj).length;
obj[nextID] = f;
// pass nextID to some other function

但是,我也希望在某些时候删除条目:

delete obj[someID]

这是一个问题,因为如果我添加一些绑定函数ab然后删除a,我得到的下一个id将是1,并且我放置了绑定函数将覆盖b

我能做的是:

function getNextID() {
    var possibleID = Object.keys(obj).length;
    while (obj[possibleID])
        possibleID *= 2; // or some other mutation

    return possibleID;
}

但这感觉很难看。

我尝试使用绑定函数作为键,但这不起作用:

obj[a] = a;
obj[b] = b;
console.log(Object.keys(obj).length); // 1

如何获取当前未使用的任意对象属性?当然,我正在过度思考......

1 个答案:

答案 0 :(得分:0)

哇,我应该使用数组。

var arr = [];

function f() { }
function f2() { }

var a = f.bind(this);
var b = f2.bind(this);

arr.push(a);
var id = arr.length; // 1

delete arr.id;

arr.push(b);
console.log(arr.length); // 2