如何在 JavaScript 中创建哈希或字典对象

IT技术 javascript dictionary
2021-02-06 12:40:43

我想在 javascript 中创建一个地图对象。我想到了以下想法:

 var a = new Array();
 a["key1"] = "value1";
 a["key2"] = "value2";

但是我怎么能找到一个特定的键是否存在呢?

5个回答

如果您想要命名键,请不要使用数组,请使用普通对象。

var a = {};
a["key1"] = "value1";
a["key2"] = "value2";

然后:

if ("key1" in a) {
   // something
} else {
   // something else 
}
稍后如何在“a”中推送新键。a.push({"key3","value3"}) 会起作用吗?
2021-03-18 12:40:43
push是一个数组方法,这里有一个普通对象。对何时可以修改对象没有限制,并且可以使用与答案中相同的语法:a["key3"] = "value3";
2021-03-20 12:40:43
如何使用键删除元素?
2021-03-25 12:40:43
语法可以缩短为 var a = {'key1': 'value1', 'key2': 'value2'};
2021-03-28 12:40:43
@DushyantBangaldel a["key1"]del a.key1
2021-04-07 12:40:43

JavaScript 现在可以使用内置的 Map 类型。它可以用来代替简单地使用 Object. 所有主要浏览器的当前版本都支持它。

地图不支持[subscript]对象使用符号。该语法隐式地将subscript值转换为原始字符串或符号。Maps 支持任何值作为键,因此您必须使用方法.get(key),.set(key, value).has(key)

var m = new Map();
var key1 = 'key1';
var key2 = {};
var key3 = {};

m.set(key1, 'value1');
m.set(key2, 'value2');

console.assert(m.has(key2), "m should contain key2.");
console.assert(!m.has(key3), "m should not contain key3.");

对象仅支持原始字符串和符号作为键,因为值存储为属性。如果您使用的是 Object,它将无法区分key2key3因为它们的字符串表示形式相同:

var o = new Object();
var key1 = 'key1';
var key2 = {};
var key3 = {};

o[key1] = 'value1';
o[key2] = 'value2';

console.assert(o.hasOwnProperty(key2), "o should contain key2.");
console.assert(!o.hasOwnProperty(key3), "o should not contain key3."); // Fails!

有关的

@Ghashange 该提案已经标准化,并且在所有浏览器的当前版本中都得到支持。:)
2021-03-21 12:40:43
Map在 Chrome 上,即使获取属性也很慢,而且,正如你所说,它的界面与普通的 javascript 对象完全不兼容。例如,您不能使用a[key]and Object.keys()我不建议使用它。
2021-03-29 12:40:43
someMap.set(key, val) 在 nodejs 中不起作用
2021-04-01 12:40:43
@sports 你是对的,Node.js 默认没有启用很多新功能(还没有!)。如果您设置了node --harmony标志,它就会启用,并且在 IO.js 中默认启用。
2021-04-02 12:40:43
你应该小心,因为这是一项“实验技术,ECMAScript 6 (Harmony) 提案的一部分”
2021-04-13 12:40:43

你想创建一个对象,而不是一个数组。

像这样,

var Map = {};

Map['key1'] = 'value1';
Map['key2'] = 'value2';

您可以通过多种方式检查密钥是否存在:

Map.hasOwnProperty(key);
Map[key] != undefined // For illustration // Edit, remove null check
if (key in Map) ...
在什么意义上完全错误......它正在检查一个值是否为空或未定义,这取决于他想做的事情可能会有所帮助:\ ...
2021-03-18 12:40:43
如果你重新定义undefined你应该得到它引起的任何错误。null 表示故意的非值,而 undefined 表示未初始化的变量。仅仅因为null == undefinedwill 返回 true,并不意味着 null 与 undefined 完全相同。
2021-03-26 12:40:43
一个值可以是nulland undefined,这并不意味着该属性不存在。Plus undefined可以在 JavaScript 中重新定义(试试看!),所以我永远不会依赖它。
2021-04-01 12:40:43
Map[key] != null && Map[key] != undefined是不可靠的,不应使用(甚至更多:这是完全错误的)。
2021-04-07 12:40:43
var x = {}; undefined = true; x.key1 = undefined; x.key1 === undefined; /* true */ x.key1 === true; /* true */ typeof x.key1 === "undefined"; /* false */
2021-04-07 12:40:43

使用in运算符:例如"key1" in a

if( a['desiredKey'] !== undefined )
{
   // it exists
}
键可能存在但具有未定义的值。
2021-03-19 12:40:43