最简单的定义关联数组的方法

时间:2016-03-11 18:29:38

标签: javascript arrays

我需要一个如下数组:

[0: 0, 1: 1, 2: 2]

使用此代码:

var arr = [];

for(i=0; i<3; i++){
    arr[i] = i;
}

我的数组看起来像这样:

[0, 1, 2]

然后通过键更新值:

arr[0] = 2.5;
arr[1] = 8.4;
arr[2] = 3.7;
...

最后,arr将按值排序,以便我得到以下顺序:

[[0:2.5],[2:3.7],[1:8.4],...]

5 个答案:

答案 0 :(得分:1)

JavaScript中没有关联数组的概念。有些对象是键/值对的集合。对象没有排序,因此无法排序。

如果你想维护秩序,我建议使用一个数组,其元素本身是包含索引和值的元组:

var array = [[0, 0], [1, 1], [2, 2]];

更新值:

array[1][1] = 8.4;

您可以使用

按值排序
var sorted_array = array.sort((a, b) => a[1] - b[1])

现在您可以获得与&#34; index&#34;相关联的值。 i

sorted_array.find(elt => elt[0] === i)[1]

这种方法似乎比其他需要维护两件事的建议更简单,一个是提供键/值对的对象,另一个是给出有序键列表的数组。

答案 1 :(得分:0)

JavaScript没有关联数组的概念。你必须创建一个对象。

var arr = {};
for(var i=0; i<3; i++) {
    arr[i] = i;
}

答案 2 :(得分:0)

您可以使用数组和对象获取值和顺序等信息。

订单存储在order属性中,仍然可以通过(通常的数组)索引访问一个元素。

&#13;
&#13;
function sort() {
    // get array and sort it and chnage order prop of objects
    array.map(function (a, i) { return { index: i, value: a.value }; }).sort(function (a, b) {
        return a.value - b.value;
    }).forEach(function (a, i) {
        array[a.index].order = i;
    });
}

function getSortedValues() {
    var r = [];
    array.forEach(function (a) {
        r[a.order] = a.value;
    });
    return r;
}


// build data structure
var array =  [2.5, 8.4, 3.7].map(function (a, i) {
    return { value: a, order: i };
});

sort();
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
// change a value
array[2].value = 9.9;
sort();
document.write('<pre>' + JSON.stringify(getSortedValues(), 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以保留两个数据结构:

  • 一个为您提供key => value访问权限的对象。
  • 为您提供订单的key数组。

您可以创建一个封装器对象,封装这两个对象并公开API以执行所需的操作(通过键,排序,迭代等访问)。

答案 4 :(得分:0)

你想要的是一个通用对象数组(working pen),因为你似乎想保留每个数组元素的原始索引。基本上你像这样创建数组:

var arr = [];
var ARRAY_SIZE = 3;

for (var i=0, len = ARRAY_SIZE; i < len; ++i){
    arr[i] = { id : i, value : null };
}

写下这样的值:

arr[0].value = 2.5;
arr[1].value = 8.4;
arr[2].value = 3.7;

然后排序:

arr.sort(sort_function);
function sort_function (a, b)
{
  return a.value - b.value;
}

明确表达你的财产是最好的 - 我选择&#34; id&#34;而不是原始索引&#39;和&#34;价值&#34;而不是隐含的匿名,但根据其在您的应用程序中的角色进行选择。