繁体   English   中英

JavaScript 中带有对象键的数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM