有没有更好的方法来编写这个功能?它已经有效,但我担心效率不高

时间:2014-05-30 03:43:44

标签: javascript arrays for-loop

function sameAlignment (a, b) {
if (a.alignment > 50 && b.alignment > 50) {
    return true;
} else if (a.alignment < 50 && b.alignment < 50) {
    return true;
} else {
    return false;
}
}

function bondStaff () {
for ( var i = 0; i < army.officers.generals.length; i++ ) { //for each general
    var general = army.officers.generals[i]; 
    for ( var d = 0; d < army.officers.generals.length; d++ ) { //loop through each general
        var general_b = army.officers.generals[d]; 
        if (sameAlignment(general, general_b) && (general.id != general_b.id)) { //if same alignment and not self
            var had_bond = false;
            for (var n = 0; n < general.bonds.length; n++) {
                var bond = general.bonds[n];
                if (bond[0] === general_b.id) {
                    bond[1]++; //if they were already bonded, strengthen the bond
                    had_bond = true;
                }
            };
            if (!had_bond) {
                var new_bond = [general_b.id, 0];
                general.bonds.push(new_bond); //if not create new bond
            }
        }
    }
}
}

我有这个JSON数据结构,其中对象人员有一个名为generals的数组,其中包含一般对象。一般对象具有alignment属性,该属性是1到100之间的整数。一般对象还具有bonds属性,该属性是具有两个属性的对象数组:官员ID和绑定强度。

我有一些游戏循环,基本上每500毫秒勾选一次,对于每个将军,我想检查是否有另一个具有类似对齐的将军,在这种情况下,如果没有粘合剂,我想添加一个与officer.general.bonds结合,如果已经存在关系,我想加强它。

我该如何优化此代码?它已经有效了。

1 个答案:

答案 0 :(得分:1)

好吧,sameAlignment可以写成 -

function sameAlignment (a, b) {
  return ( (a.alignment > 50 && b.alignment > 50) ||
           (a.alignment < 50 && b.alignment < 50) );
}

此外,

for ( var i = 0; i < army.officers.generals.length; i++ )

应该是

for ( var i = 0; i < army.officers.generals.length - 1; i++ )

而且,我认为

for ( var d = 0; d < army.officers.generals.length; d++ )

应该是

for ( var d = i + 1; d < army.officers.generals.length; d++ )