【问题标题】:Associative array in javascript using a pair/tuple as multi-value key/indexjavascript中的关联数组使用一对/元组作为多值键/索引
【发布时间】:2014-04-03 03:06:56
【问题描述】:

在 python 中,我可以使用元组作为字典的键。 javascript中的等价物是什么?

>>> d = {}
>>> d[(1,2)] = 5
>>> d[(2,1)] = 6
>>> d
{(1, 2): 5, (2, 1): 6}

有兴趣的朋友,我有两个数组...

positions = ...

normals = ...

我需要制作第三个位置/法线对数组,但不希望有重复的对。我的关联数组可以让我检查我是否有一个现有的 [(posIdx,normalIdx)] 对可以重复使用,如果没有则创建一个。

我需要某种使用双值键的索引方式。我可以只使用一个字符串,但这似乎比两个数字慢。

【问题讨论】:

  • 目前真的没有(即将发布的 JavaScript 版本计划包含一个)——有什么特别的理由这样做吗?
  • 你到底想做什么?我的意思是,您实际上可以使用元组的字符串表示形式作为数组的键,但是想到它有点痛苦。您还可以使用实际的二维关联数组以及 Stepan 在他的回答中提到的。我认为如果你说出你想要做什么,你会得到一个更好的答案,并且可能会展示你是如何使用上述类型的数据结构的。
  • 任何一个位置是否可以有多个法线,反之亦然?
  • @Jack 是的,这正是我需要双值键的原因。我的应用程序需要 1 比 1 的位置/法线,但如果我不重复使用现有的对,数据会变得更大。

标签: javascript dictionary associative-array


【解决方案1】:

Javascript 没有元组,但您可以使用数组。

>>> d = {}
>>> d[[1,2]] = 5
>>> d[[2,1]] = 6
>>> d
Object {1,2: 5, 2,1: 6}

【讨论】:

  • 注意这里只是使用了数组的字符串表示,即d['1,2']d[[1,2]]是一样的。
【解决方案2】:

您可以使用地图:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

对象的键是字符串和符号,而它们可以是任何 Map 的值,包括函数、对象和任何原语。

这将避免键只是数组的字符串表示的潜在问题。

d = {};
d[[1,2]] = 5;
d[[2,1]] = 6;
console.log("d[[1,2]]:", d[[1,2]]);
console.log("d['1,2']:", d['1,2']);

m = new Map();
ak1 = [1,2];
ak2 = [1,2];
m.set([1,2], 5);
m.set([2,1], 6);
m.set(ak1, 7);
console.log("m.get('1,2'):", m.get('1,2'));
console.log("m.get([1,2]):", m.get([1,2]));
console.log('m.get(ak1):', m.get(ak1));
console.log('m.get(ak2):', m.get(ak2));

请注意,它对键使用变量引用,而不是值。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2021-05-05
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多