Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript对象作为对象键_Javascript_Object_Key_Underscore.js - Fatal编程技术网

使用Javascript对象作为对象键

使用Javascript对象作为对象键,javascript,object,key,underscore.js,Javascript,Object,Key,Underscore.js,我正试图设计一种方法,使用一个简单的Javascript对象(一级深键值对)作为另一个对象的键。我知道仅使用对象而不进行字符串化将导致[object object]被用作键;请看以下内容:(所以这个问题不是重复的) 有一种方法考虑到了这一点,也考虑到了按对象键排序的需要,因为它们的顺序没有保证,但是包含的Javascript代码运行了100行。我们使用的是underline.js库,因为它与主干网密切相关,但纯Javascript的替代方案也会引起人们的兴趣 这里是一个基于下划线的解决方案,它依

我正试图设计一种方法,使用一个简单的Javascript对象(一级深键值对)作为另一个对象的键。我知道仅使用对象而不进行字符串化将导致
[object object]
被用作键;请看以下内容:(所以这个问题不是重复的)


有一种方法考虑到了这一点,也考虑到了按对象键排序的需要,因为它们的顺序没有保证,但是包含的Javascript代码运行了100行。我们使用的是underline.js库,因为它与主干网密切相关,但纯Javascript的替代方案也会引起人们的兴趣

这里是一个基于下划线的解决方案,它依赖于首先将对象转换为键值对

var myObj = { name: 'john', state: 'ny', age: 12};
var objPairs = _.pairs(myObj);

var sortedPairs = _.reduce(_.keys(myObj).sort(), function(sortedPairs, key) {
    var pair = _.find(objPairs, function(kvPair) {return kvPair[0] == key});
    sortedPairs.push(pair);
    return sortedPairs;
}, []);

console.log(JSON.stringify(sortedPairs)); //stringifying makes suitable as object key
// [["age",12],["name","john"],["state","ny"]]

我编写了一个接受任意键的哈希表实现,但我怀疑您会因为文件相对较大而拒绝它


在ECMAScript 6中,您可以使用

var-map=newmap();
var keyObj={a:“b”},
keyFunc=函数(){},
keyString=“foobar”;
//设置值
map.set(keyObj,“与keyObj关联的值”);
map.set(keyFunc,“与keyFunc关联的值”);
set(键串,“与'foobar'关联的值”);
console.log(map.size);//3.
//获取值
console.log(map.get(keyObj));//“与keyObj关联的值”
console.log(map.get(keyFunc));//“与keyFunc关联的值”
console.log(map.get(keyString));//“与‘字符串’关联的值”
console.log(map.get({a:b}));//未定义,因为keyObj!=={a:“b”}
console.log(map.get(function(){}));//未定义,因为keyFunc!==函数(){}
console.log(map.get(“foobar”);//“与'foobar'关联的值”

//因为keyString==='foobar'
您可以使用这样的模式。这样,对象的键就是为每个对象生成的随机id

var MyObject = function(name) {
    this.name = name;
    this.id = Math.random().toString(36).slice(2);
}

MyObject.prototype.toString = function() {
    return this.id;
}