在JavaScript中使用对象键的数组

时间:2017-10-05 05:31:57

标签: javascript

如何使用键作为对象(类的实例)创建一个数组?

我正在尝试做类似的事情:

const parent = {};

while (child !== undefined) {
    for (const element of list) {
        parent[element] = child;
    }
    child = child.next;
}

这基本上就是这个想法;如果element是一个字符串,则代码可以工作,但如果该元素是一个对象,则它无法正常工作。

3 个答案:

答案 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。您也可以使用一些随机字符串来表示它的价值。

如果我知道为什么要将对象存储为开始的关键,我将能够为您提供更好的解决方案。