如何在JavaScript中访问“关联”数组的第一个键?

9

我有一个JavaScript的“关联”数组,其中

array['serial_number'] = 'value'

serial_number和value都是字符串。 例如:array['20910930923'] = '20101102'

我按值对它进行了排序,效果很好。 假设我得到了对象“sorted”;

现在我想访问“sorted”数组的第一个KEY。 我该怎么办?我不认为需要迭代。

for (var i in sorted)

只需要在第一个停止...

谢谢

编辑:为了澄清,我知道JS不支持关联数组(这就是为什么我把它放在标题中的引号中的原因)。


1
https://dev59.com/SnNA5IYBdhLWcg3wku3O - Anders
你是如何对数组进行排序的? - Emmett
艾米特:通过这样做:http://www.jamesrutherford.com/blog/2010/08/07/javascript-associative-array-sort/ - transient_loop
只是为了澄清术语 - 您正在使用JS对象进行工作。在JavaScript中,数组由整数索引。对象由字符串/标识符索引,并且可以像这样访问属性:obj ['prop']或像这样:obj.prop,因此它的行为类似于关联数组对象。 - Skilldrick
4个回答

3

2021更新

自ES6以来,具有字符串键的属性按插入顺序枚举。这里是一个很好的摘要。我的原始答案来自2010年,当时是正确的,并在下面保留:

原始答案

JavaScript对象属性被指定为没有顺序,尽管许多人希望它不同。如果您需要排序,请放弃使用对象并改用Array,可以将其用于存储名称 - 值对象:

var nameValues = [
    {name: '20910930923', value: '20101102'},
    {name: 'foo', value: 'bar'}
];

...或者作为现有对象使用的属性名称有序列表:

var obj = {
   '20910930923': '20101102',
   'foo': 'bar'
};

var orderedPropertyNames = ['20910930923', 'foo'];

2

试试这个:

// Some assoc list
var offers = {'x':{..some object...}, 'jjj':{...some other object ...}};

// First element (see attribution below)
return offers[Object.keys(offers)[0]];

// Last element (thanks to discussion on finding last element in associative array :)
return offers[Object.keys(offers)[Object.keys(offers).length - 1]];

1
实际上,JavaScript 不支持关联数组,因此您无法按隐含顺序循环遍历它(例如,您无法通过索引器属性访问它 array [0] 将不会访问对象中的第一个元素)。 语法使其看起来像是支持,但实际上并不是这样。因此,您的对象没有“顺序”。

http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

JavaScript没有,也不支持关联数组。然而,在JavaScript中,所有的数组都是对象,并且JavaScript的对象语法提供了基本的关联数组模拟。因此,上面的示例代码实际上可以工作。请注意,这不是一个真正的数组,如果您尝试使用它,它会有真正的缺陷。例如,示例中的'person'元素成为了数组对象的属性和方法的一部分,就像.length、.sort()、.splice()和所有其他内置属性和方法一样。

2
嗯,对象是关联数组? - falstro
3
在 JavaScript 中没有关联数组,它们全部都是大而复杂的对象。 - Anders
1
@Anders;土豆土豆,没有对象,它们只是一些特别大的关联数组。 - falstro
2
JS 对象当然可以用作关联数组,因此上面的链接对我来说似乎更具有误导性而非实用性。 - Matthew Wilson
3
如果一个人走路像鸭子、说话像鸭子,那我就称他为鸭子。虽然在JavaScript中被称为“对象属性”,但这并不能阻止它们成为关联数组。你贴的链接只是说它们不是线性数组,而它们确实不是。如果你想争辩它们不是关联数组,那就请列出一种关联数组的特性,而JavaScript对象没有。 - falstro
显示剩余2条评论

0

我随口想了想,你可以创建另一个数组,将键值对交换吗?

这样答案就会是arrayKeyValueReversed['20101102'] = '20910930923';

当你对数组进行排序时,使用第一个项(array[0])作为键来获取arrayKeyValueReversed中的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接