我有一个数组:
arr = [ 1, 2 , 3 ]
另一个我将DOM元素保存为
的数组Elem = [ 1, 3]
我需要迭代arr并且只在索引匹配时执行操作。例如,因为我在循环arr时有elem 1和3,所以只有1和3才会发生,因为没有elem 2,所以应该跳过2。
有人告诉我要研究关联数组,我想知道如何用最少的行来做到这一点。
我希望代码简单易读,到目前为止,所有关联数组的例子都没有意义,而且很臃肿。
答案 0 :(得分:1)
for(var i = 0;i<arr.length;i++){
if(Elem.indexOf(arr[i])>-1){
//Elem contains arr[i] (contains object that at index i in arr)
//will be called only for 1 and 3 in arr
arr[i] = ... //do what you want with this object.
}
}
你是说这个吗?
答案 1 :(得分:1)
我稍微修改了第二个数组,以允许在一个地方定义多个动作。我不确定我是否理解正确。
// array of DOM objects available
var arr = ['object1-selector', 'object2-selector', 'object3-selector'];
// array of actions with items that the method should be applied to
var actions = [
{
items: ['object1-selector', 'object3-selector'],
perform: function(elem) {
alert(elem);
}
},
{
items: ['object2-selector'],
perform: function(elem) {
alert(elem);
}
},
{
items: ['object4-selector'],
perform: function(elem) {
alert(elem);
}
}
];
//forEach loop that iterates over actions and checks if selector exists.
//If yes - it invokes the method
actions.forEach(function(action) {
action.items.forEach(function(item) {
if(arr.indexOf(item) > -1) {
action.perform(item);
}
});
});
如果您想在一个地方定义动作并在多维数组中定义对象 - 请告诉我。我会尝试调整这个例子。如果你不存储选择器而是整个DOM对象,只需修改items:
数组和循环,检查元素是否存在。
哦,这是jsfiddle:http://jsfiddle.net/3WJxc/2/。 jQuery仅用于alert()以向您展示工作示例。
答案 2 :(得分:1)
不确定如何识别第二个数组中的元素,但这是我的建议。带有ID的数组
var arr = [ "id_1", "id_2", "id_3" ]
var Elem = {
"id_1": html_element,
"id_2": html_element,
"id_3": html_element
}
然后您需要做的就是
for( var i = 0; i < arr.length; i++ ) {
if( Elem[ arr[i] ] ) {
// do stuff
}
}