【问题标题】:How to create/maintain a basic associative array/hash with JavaScript?如何使用 JavaScript 创建/维护基本的关联数组/哈希?
【发布时间】:2012-02-27 00:06:49
【问题描述】:

我正在记录 x 轴的加速度数据,因此我输入了两个值 - x 值和加速度事件的纪元时间。我想将这些存储为哈希,其中纪元时间是键,x 值是值。

我创建了一个数组:

var arrX = new Array();

如何添加?像这样?

arrX[acceleration.timestamp] = acceleration.x

【问题讨论】:

  • 时间戳是原始数字吗?
  • 是的,它是一个原始数字,例如“14112123245556”,x 值也是

标签: javascript hash associative-array


【解决方案1】:

您应该使用一个对象,can serve as a sort of "associative array" 用于此应用程序。对象将为您提到的任意非顺序键提供支持,而数组则不会。

var arrX = {};

arrX[acceleration.timestamp] = acceleration.x;

更多信息:

【讨论】:

  • "...数组不会出现的地方" 这并不完全正确。数组将提供与对象相同的支持,因为数组是一种对象。只是 Array.prototype 方法只适用于数字索引。此外,数组不需要索引是连续的。
  • 当然,您可以使用数组来完成这项工作,但我认为我们可以同意它绝对不是最合适的数据结构。
【解决方案2】:

你可以这样做,但没有数组。只需使用这样的对象

var values = {};
values[acceleration.timestamp] = acceleration.x;

因为如果你这样做

var x = [];
x[1555] = 500;

您将创建一个包含 1556 个元素的数组,其中除了 1555 之外的所有元素都设置为未定义

【讨论】:

  • 实际上x[1555] 示例将x.length 设置为1556,因为.length 始终比分配的最高索引高1,但它实际上并没有创建任何其他元素。这是一个细微的差别,但使用 in 运算符或 .hasOwnProperty() 您可以判断特定索引是否已显式分配 undefined 或从未分配过值。 Array.forEach() method 还会跳过从未分配过值的数组索引...
  • "...将创建一个包含 1556 个元素的数组" 不,它不会。它将创建一个包含一个元素的数组,但 .length 属性设置为 1557
【解决方案3】:

在 Javascript 中,如果需要关联数组,则使用对象:

var hash1 = {}; // declare
hash1.first = 'abc'; // set property first to a string
hash1['second'] = 'def'; // set property second to a string

var t = 'third';
hash1[t] = 'ghi'; // set property third to a string

hash1.forth = {a:1, b: 'abc'}; // set property forth to be an object / hash
                               // with 2 properties

alert (hash1.forth.a); // will alert with 1  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 2012-09-02
    • 2015-11-15
    • 2011-04-22
    • 2011-04-20
    • 1970-01-01
    • 2012-06-27
    • 2018-08-26
    相关资源
    最近更新 更多