数组作为javascript地图的关键?

时间:2017-06-29 07:43:35

标签: javascript arrays dictionary

Map是ECMA6中的新对象,如果为同一个键分配多个值,它将覆盖所有以前的值。例如,



'use strict';

var m = new Map();

m.set(['aaron', 100]);
m.set(['aaron', 100], 1);
m.set(['aaron', 100], 10);
m.set(['aaron', 100], 100);
m.set(['aaron', 100], 1000);
m.set(['aaron', 100], 10000);

console.log(m.get(['aaron', 100]));




它会显示一个奇怪的输出(未定义),为什么?非常感谢。

2 个答案:

答案 0 :(得分:1)

<parameter name="datestart" class="java.sql.Date"> <defaultValueExpression><![CDATA[new java.sql.Date(new java.util.Date().getTime())]]></defaultValueExpression> </parameter> 使用对数组的引用作为键,而不是数组的内容。

这个简单的比较表明,具有相同内容的数组不是相同的数组(具有不同的引用):

Map

如果您设置并获得相同的参考,它可以工作:

const a = ['aaron', 100];
const b = ['aaron', 100];

console.log(a === b);

答案 1 :(得分:1)

在JavaScript中,“数组”,“对象”或“函数”是“引用”类型,当您比较它们时,您实际上所做的是将引用与它们在内存中的位置进行比较,而不是它们的值。当它们都分配到不同的位置时,结果将返回“ false”。

您应该做的是将它们转换为原始类型。 JSON字符串,例如:

let a = {1: 'foo'},
    b = {1: 'foo'};
    
console.log(a === b);
console.log(JSON.stringify(a) == JSON.stringify(b));