Heim  >  Fragen und Antworten  >  Hauptteil

Verwenden von Array-Objekten als Schlüssel in ES6 Map

Ich versuche, meinen Code auf ES6 zu aktualisieren, da ich Node 4.0 verwende und dessen Funktionen mir bisher sehr gut gefallen. Beim neuen ES6 geht es mir allerdings anders Map 数据结构有问题,因为当使用 Array 作为键时,它的行为与 {}. Ich verwende es als Gegenkarte.

Ich führe diesen Code aus und möchte wissen, wie man ein Array als Schlüssel für Map verwendet.

"use strict";

var a = new Map();
a.set(['x','y'], 1);
console.log(a.get(['x','y']));

var b = {};
b[['x','y']] = 1;

console.log(b[['x','y']]);

Es wird Folgendes ausgegeben, die erste Zeile sollte 1 而不是 undefined:

lauten
undefined
1

Die ursprüngliche JS-Map stringifiziert die Schlüssel und ich möchte mit dem neuen ES6 nicht die gleiche Art von Stringifizierungs-Hack durchführen Map.

Wie kann ich Arrays zuverlässig als Schlüssel in ES6 verwenden Map?

P粉344355715P粉344355715364 Tage vor643

Antworte allen(2)Ich werde antworten

  • P粉529245050

    P粉5292450502023-10-22 13:33:57

    您需要保存对用作键的 Array 的非原始实例的引用。请注意以下两个示例中的差异:

    "use strict";
    
    var a = new Map();
    a.set(['x','y'], 1);
    console.log(a.get(['x','y']));
    console.log(['x','y'] === ['x','y']);
    
    var b = new Map();
    var array = ['x','y'];
    b.set(array, 1);
    console.log(b.get(array));
    console.log(array === array);

    Antwort
    0
  • P粉978551081

    P粉9785510812023-10-22 11:23:32

    了解 ES2015 Map 键的比较(几乎)就像与 === 运算符一样。两个数组实例,即使它们包含相同的值,也不会以 === 的方式相互比较。

    试试这个:

    var a = new Map(), key = ['x', 'y'];
    a.set(key, 1);
    console.log(a.get(key));

    由于 Map 类旨在用作基类,因此您也许可以使用重写的 .get() 函数来实现子类。

    (第一句中的“几乎”是反映Map键相等性比较是通过Object.is()完成的,这在日常编码中很少出现。本质上是 JavaScript 中相等测试的第三种变体。)

    Antwort
    0
  • StornierenAntwort