【问题标题】:Force order of array in JavaScript [duplicate]JavaScript中数组的强制顺序[重复]
【发布时间】:2014-02-06 22:57:56
【问题描述】:

我似乎无法通过我提供的顺序访问我的数组,无论我如何在数组中定位它的键和值,数组都会不断地重新排序。

我的意思的一个例子

var array = [];
array[1] = 'test';
array[2] = 'dddd';
array[3] = 'aaaa';
array[0] = 'good';

console.log(array)

在我们剩下的控制台中

[Object Array]
0: "good"
1: "test"
2: "dddd"
3: "aaaa"

这是重新排序的,这不是我创建数组的方式。 我想访问我订购的数组,这会产生结果

[Object Array]
1: "test"
2: "dddd"
3: "aaaa"
0: "good"

我怎样才能做到这一点?

提前致谢。

【问题讨论】:

标签: javascript


【解决方案1】:

您已使用无序索引创建了数组,然后使用顺序索引访问该数组。 当然你会看到不同的顺序。

如果您使用无序索引添加它们,则无法按照您添加它们的顺序访问这些属性。您必须单独跟踪它。例如:

var array = [];
var order = [];
order.push(1);
array[1] = 'test';
order.push(2);
array[2] = 'dddd';
order.push(3);
array[3] = 'aaaa';
order.push(4);
array[0] = 'good';

var i; // You didn't have this, but you want it

for (i = 0; i < order.length; ++i) {
    alert(array[order[i]]);
}

当然,你可能会结合

order.push(x);
array[x] = y;

...变成一个函数。

【讨论】:

  • 是的,for循环确实不是一个很好的例子,但是我试图提供另一个例子。在 php 中,我们可以通过使用 foreach 循环来遵守声明数组的顺序,在 JavaScript 中是否没有替代方法?
  • @cecilli0n:正确,没有。唯一的顺序是索引顺序,即使这有点人为(例如,顺序来自索引的数字关系,而不是数组固有的任何东西)。
  • 有一个数组的each方法。但这根本解决不了你的问题。
  • @cecilli0n:如果您使用的是非数组对象,那么某些引擎会提供 unspecified 行为,这些行为会遍历您按顺序添加的属性的键您添加它们(使用for-in 循环),但这是未指定且不通用的,因此依赖它是一个非常糟糕的主意。您几乎必须跟踪自己,或者如上所述,或者通过将对象推送到数组上来代替(例如array.push({index: 1, value: 'test'}))。
  • @cecilli0n:为了完善这一点:您完全可以在 JavaScript 中相当简单地构建类似 PHP 的有序映射(“关联数组”)的东西,但它没有这样的东西——盒子。我认为大多数环境/语言都不会,它们是很奇怪的鸭子。 :-) 你可能会像上面的第一个例子那样做,除了array 可能是一个普通对象({}),因为我们不需要数组,你会包装整个事情变成一个统一的模型。
【解决方案2】:

只需按照您希望它显示的顺序创建数组。注意索引的顺序:

array[0] = 'test';
array[1] = 'dddd';
array[2] = 'aaaa';
array[3] = 'good';

或者使用push:

array.push('test');
array.push('dddd');
array.push('aaaa');
array.push('good');

【讨论】:

    【解决方案3】:

    做

    var array = [];
    array[0] = 'test';
    array[1] = 'dddd';
    array[2] = 'aaaa';
    array[3] = 'good';
    

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 2019-08-20
      • 2010-12-23
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多