在将功能推送到控制台然后冲洗并重复之前,我如何从阵列中“拉”出两个变量?

时间:2014-02-16 17:49:42

标签: javascript arrays

我正在使用的当前代码是:

document.getElementById('hexa').className='transtart burna';
document.getElementById('hexb').className='transtart burnb';
document.getElementById('hexc').className='transtart burnc';
document.getElementById('hexd').className='transtart burnd';
document.getElementById('hexe').className='transtart burne';
document.getElementById('hexf').className='transtart burnf';
document.getElementById('hexg').className='transtart burng';
document.getElementById('hexh').className='transtart burnh';
document.getElementById('hexi').className='transtart burni';
document.getElementById('hexj').className='transtart burnj';
document.getElementById('hexk').className='transtart burnk';
document.getElementById('hexl').className='transtart burnl';
document.getElementById('hexm').className='transtart burnm';

我想做的是把它变成这个:

function hexLoad(){
    var hexArray = ["hexa", "hexb", "hexc", "hexd", "hexe", "hexf", "hexg", "hexh", "hexi", "hexj", "hexk", "hexl", "hexm"];
    var burnArray = ["burna", "burnb", "burnc", "burnd", "burne", "burnf", "burng", "burnh", "burni", "burnj", "burnk", "burnl", "burnm"];
    for(var i=0; i < hexArray.length; i++){
         document.getElementById(hexArray[i]).className='transtart ' + burnArray[i]};
    };
 };

我的难题是,唯一可行的原因是因为hexArray中的字符串数与burnArray中的字符串数相同。有没有其他方法可以将SECOND for循环实现为'数组读取器',这样我可以输出相同类型的东西,但是当两个数组中包含不同数量的字符串时? 我需要做的就是将从数组中选择的两个变量ZIP压缩到一个函数中,然后将该函数推送到控制台,然后冲洗并重复。

1 个答案:

答案 0 :(得分:1)

您可以在一个循环中执行此操作,只需指定正确的条件:

for(var i=0; i < hexArray.length && i < burnArray.length; i++){
    document.getElementById(hexArray[i]).className='transtart ' + burnArray[i];
};

或者:

var minLength = Math.min(hexArray.length, burnArray.length);
for(var i=0; i < minLength; i++){
    document.getElementById(hexArray[i]).className='transtart ' + burnArray[i];
};

你可以在这样的方法中实现这个(注意在这种情况下不需要返回值,我只是为了完整性而包含它):

function zip(a, b, f) {
    var minLength = Math.min(a.length, b.length), result = new Array(1);
    for(var i=0; i < minLength; i++){
        result[i] = f(a[i], b[i], i);
    };
    return result;
}
...

zip(hexArray, burnArray, function(x, y) { 
    document.getElementById(x).className = 'transtart ' + y;
});

Demonstration