从javascript中的关联数组/对象中获取特定元素

时间:2014-03-11 05:34:57

标签: javascript arrays

我有像这样的JavaScript数组

var arr = [];
arr['5u'] = 250;
arr['1u'] = 120;
arr['7u'] = 670;
arr['2u'] = 210; //<-----
arr['9u'] = 850; //<-----
arr['8u'] = 129; //<-----
arr['3u'] = 382;
arr['6u'] = 391;
arr['4u'] = 432;

我想在上面的数组中只获得从3到5的索引开始的3个元素。我该怎么办?结果应该是这样的。

[210,850,129];

我尝试将其作为 arr [3] 进行访问,并且它正在显示 undefined 。现在我怎么能这样做?

我想像这样使用循环访问值

for(var i=3; i<6; i++)
{
    console.log(arr[i]);
}

8 个答案:

答案 0 :(得分:2)

我建议你使用这种技术

arr[0] = [250, '5u'];
arr[1] = [120, '1u'];
arr[2] = [670, '7u'];
arr[3] = [210, '2u'];
arr[4] = [850, '9u'];
arr[5] = [129, '8u'];
arr[6] = [391, '3u'];
arr[7] = [432, '6u'];

现在你可以像这样排序

arr.sort(function(a, b) {return b[0] - a[0]});

并访问任何类似

的元素
console.log(arr[3][0]);
console.log(arr[4][0]);
console.log(arr[5][0]);

答案 1 :(得分:1)

由于您已为阵列提供了密钥,因此您需要使用arr['2u']arr['9u']arr['8u']进行访问。您无法使用arr [3]进行访问,因为它不与这些索引一起存储。

答案 2 :(得分:1)

为了绝对安全,您需要并行数据结构。你所描述的是地图而不是数组。问题是地图是无序的,因此您不能依赖于放在其中的元素的顺序。您需要一个随附的数组来跟踪订单。请参阅:Ordered hash in JavaScript

答案 3 :(得分:1)

我会以这种方式填充数组:

var arr = [], 
map = {},
append = function(key, value) {
    return arr[map[key] = arr.length] = [key, value];
}

append('5u', 250);
append('1u', 120);
append('7u', 670);
append('2u', 210); //<-----
append('9u', 850); //<-----
append('8u', 129); //<-----
append('3u', 382);
append('6u', 391);
append('4u', 432);

map结构允许您按标识符查找元素。

通过这种方式,您可以使用arr.slice()

arr.slice(3, 6); // [['2u', 210], ['9u', 850], ['8u', 129]]

对此进行排序也将保持键 - 值对:

arr.sort(function(a, b) {
    return a[1] - b[1]; // or reversed, whatever
});

请注意,排序后您必须重建地图;如果你真的想要那个结构那就好了。

答案 4 :(得分:1)

您可以为以下阵列创建自己的原型功能,

Array.prototype.selectIndex = function (n) {
          var count = 0;
          for (var i in arr) {
              if (count == n) val = arr[i];
              count++;
          }
          console.log(val);
      };

您只需输入如下所示的索引编号,

arr.selectIndex(3);
arr.selectIndex(4);
arr.selectIndex(5);

查看DEMO

答案 5 :(得分:1)

You can use this way also

var arr = {};    
arr[0] = {'key':'5u','val':250};
arr[1] = {'key':'1u','val':120};
arr[2] = {'key':'7u','val':670};
arr[3] ={'key':'2u','val':210}; //<-----
arr[4] ={'key':'9u','val':850}; //<-----
arr[5] ={'key':'8u','val':129}; //<-----
arr[6] ={'key':'3u','val':382};
arr[7] = {'key':'6u','val':391};
arr[8] ={'key':'4u','val':432};
console.log(arr[3]['val']);
console.log(arr[4]['val']);
console.log(arr[5]['val']);

答案 6 :(得分:0)

试试此代码

 var arr = [], arr2 = [];
    arr['5u'] = 250;
    arr['1u'] = 120;
    arr['7u'] = 670;
    arr['2u'] = 210; //<-----
    arr['9u'] = 850; //<-----
    arr['8u'] = 129; //<-----
    arr['3u'] = 382;
    arr['6u'] = 391;
    arr['4u'] = 432;
    var count = 0;
    for(var i in arr){

        if(count == 3 || count == 4 || count == 5)
            arr2.push(arr[i]);
     count++;
    }

    console.log(arr2)

DEMO

答案 7 :(得分:0)

var len = arr.length;
var data=new array();
var i=0;
while (len--){
    if(i==3) {
        data[i-3]=arr[i];
    }    
    i++;
    if(i==5){
        break;
    }
}

现在,您的数据数组将包含所需的值