[英]Array with object keys in JavaScript
如何使用键作为对象(类的实例)创建数组?
我正在尝试执行以下操作:
const parent = {};
while (child !== undefined) {
for (const element of list) {
parent[element] = child;
}
child = child.next;
}
这基本上就是这个想法; 如果元素是字符串,则代码有效,但如果元素是对象,则代码无法正常工作。
如果您在 ES2015 环境中,则可以使用Map
它看起来像这样:
let parent = new Map();
while (child !== undefined) {
for (const element of list) {
parent.set(element, child);
}
child = child.next;
}
您可以在此代码笔中运行以下证明
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>
你不能。 .toString()
在作为键传递给对象的任何东西上调用,然后才用作键。 这是 Javascript 语言规范的一部分。
但是,如果需要,您可以创建Symbols对象键,但 Symbols 仅将字符串作为参数。
这不起作用,因为方法toString()
将被调用,为所有项目返回类似[object Object]
的东西。
属性名称只能是字符串,但它们可以是任何字符串...您可以使用JSON.stringify(element)
将对象转换为字符串,但您将无法像对象一样使用键值,因为它只会是它的代表......
另一个解决方案(也许更好?)是在您的类上使用一个函数来创建对象的字符串表示形式......假设您的对象来自数据库,您可以使用记录 ID。 您也可以使用一些随机字符串来获得它的价值。
如果我知道您为什么要将对象存储为开始的关键,我将能够为您提供更好的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.