如何使用键作为对象(类的实例)创建一个数组?
我正在尝试做类似的事情:
const parent = {};
while (child !== undefined) {
for (const element of list) {
parent[element] = child;
}
child = child.next;
}
这基本上就是这个想法;如果element是一个字符串,则代码可以工作,但如果该元素是一个对象,则它无法正常工作。
答案 0 :(得分:1)
如果您在ES2015环境中,可以使用Map
看起来像这样:
let parent = new Map();
while (child !== undefined) {
for (const element of list) {
parent.set(element, child);
}
child = child.next;
}
您可以在此codepen
中运行以下证明let parent = new Map();
const KEY1 = {};
parent.set(KEY1, 'hello');
console.log(parent.get(KEY1)); // hello
const KEY2 = {};
parent.set(KEY2, 'world');
console.log(parent.get(KEY2));
parent.set('est', {a: 'a'});
console.log(parent.get('est'));
或者将其视为一个堆栈代码
(function($) {
const ELEMENTS = {
$h1: $('#hello'),
$container: $('#container')
};
let parent = new Map();
const KEY1 = {};
parent.set(KEY1, 'hello');
console.log(parent.get(KEY1)); // hello
const KEY2 = {};
parent.set(KEY2, 'world');
console.log(parent.get(KEY2));
parent.set('est', {
a: 'a'
});
console.log(parent.get('est'));
/** original code from question w Map **/
var list = []; // to prevent error
let parenta = new Map();
let child;
while (child !== undefined) {
for (const element of list) {
parenta.set(element, child);
}
child = child.next;
}
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 class="hello"></h1>
<div class="container"></div>
答案 1 :(得分:0)
你做不到。 .toString()
在作为键用作键之前传递给对象的任何内容都会被调用。这是Javascript语言规范的一部分。
但是,如果需要,您可以制作Symbols个对象键,但符号仅将字符串作为参数。
答案 2 :(得分:0)
这不起作用,因为将调用方法toString()
为所有项目返回类似[object Object]
的内容。
属性名称只能是字符串,但它们可以是任何字符串......您可以使用JSON.stringify(element)
将对象转换为字符串,但是您将无法像对象一样使用键值,因为它只是它的代表...
另一种解决方案(可能更好?)是在你的类上创建一个函数来创建对象的字符串表示...假设你的对象来自数据库,你可以使用记录ID。您也可以使用一些随机字符串来表示它的价值。
如果我知道为什么要将对象存储为开始的关键,我将能够为您提供更好的解决方案。