javascript基于关联数组键值从数组中查找值

javascript基于关联数组键值从数组中查找值,javascript,jquery,Javascript,Jquery,我有一个关联数组: var array1 = { a1: { id: "box1", title: "box 1" }, a2: { id: "box2", title: "box 2" }, a3: { id: "box3", title: "box 3" } }; 然后我有另一个数组,它引用了第一个数组: var array_order = ["a

我有一个关联数组:

var array1 = {
    a1: {
        id: "box1",
        title: "box 1"
    },
    a2: {
        id: "box2",
        title: "box 2"
    },
    a3: {
        id: "box3",
        title: "box 3"
    }
};
然后我有另一个数组,它引用了第一个数组:

var array_order = ["a3:positionA", "a2:postitionB", "a1:positionC"];
我想循环浏览第一个列表,然后使用第二个列表查找位置文本

我正在使用jQuery,所以

$.each(array1, function(i,o) {
  something in here where I can use i to find out what position. e.g. if a1 I would get positionC
}

数组_顺序
而不是
array1
更轻松、更快速地迭代:

for( var i = 0, len = array_order.length; i < len; i++ ) {
    var ref = array_order[i].split(':');

    if( ref.length === 2 && ({}).hasOwnProperty.call( array1, ref[0] ) ) {
        var array1Property = array1[ ref[0] ];
        var array1PropertyPosition = ref[1];
    }
} 

在jQuery中也没有必要。

Ok first things first JS只将关联数组作为对象调用

下一步,迭代对象中的每个键

for(var prop in array1) {
    if(array1.hasOwnProperty(prop))
        for(key in array_order){
           if( key === prop){
           doSomethingwith(array_order[key]);

           }

        }
}

可能不相关的旁注:您的
array1
变量不是数组。JavaScript只有一种数组:好的基于零的数字数组,如
array\u order
。使用
for(in)
array
进行迭代太慢。尝试在firebug中启动以下示例:更正:
for(in)
for(var..++)
慢,除了v8,还有
for(in)
更快的优化。jQuery
。每个
都比
在数组上迭代的简单
慢,您的解决方案是假设的,属性名称长度始终等于2个字符。
var category=temp_array_order[key]必须检查,它是
temp\u array\u order
自己的属性,而不是来自原型链的属性。@PhillipKovalev meh。代码更小。实际上不需要进行原型检查,
$。每个
在内部使用一个
进行
循环。很抱歉,我对jQuery
的理解是错误的。每个
性能都是最好的。但我不同意不必进行财产所有权检查。@Phillip,但它不是必需的,因为
$。每个
使用
for(var I=0;…I++)
它不使用
for。。。在
循环中,我最终迭代了数组的顺序,就像你说的那样,有必要在ref.length=2中加倍“=”吗?
for(var prop in array1) {
    if(array1.hasOwnProperty(prop))
        for(key in array_order){
           if( key === prop){
           doSomethingwith(array_order[key]);

           }

        }
}
var temp_array_order = {};
$.each(array_order, function(key, val) { 
    temp_array_order[val.substr(0,2)] = val.substr(3); 
};
$.each(array1, function(key, val) {
    var category = temp_array_order[key];
    ...
});