var cl=[],di=[],sp=[],he=[];
for(var i=0;i<arg.length;i++){
if(arg[i].slice(0,2)==='cl'){cl.push(arg[i])};
if(arg[i].slice(0,2)==='di'){di.push(arg[i])};
if(arg[i].slice(0,2)==='sp'){sp.push(arg[i])};
if(arg[i].slice(0,2)==='he'){he.push(arg[i])};
}
这里我有4个if语句,它们是相同的,我如何减少代码
有很多方法可以做到这一点。以下是我知道的两种方法:
使用switch
语句:
switch((arg[i].slice(0,2)) {
case 'cl' : cl.push(arg[i]); break;
case 'di' : di.push(arg[i]); break;
case 'sp' : sp.push(arg[i]); break;
case 'he' : he.push(arg[i]); break;
}
把你的数组放在一个对象中,并使用[]
符号:
var cl=[],di=[],sp=[],he=[];
var map = {
cl : cl,
di : di,
sp : sp,
he : he
};
for(var i=0;i<arg.length;i++){
var key = arg[i].slice(0,2);
if (map[key]) map[key].push(arg[i])
}
并非如此,因为每个数组都有单独的变量。(虽然您可以使用switch
或if else
来提高性能。)
但是,如果您将数组作为单个对象的一部分,则可以大大减少if语句代码。例如:
var myArrays = {
cl: [],
di: [],
sp: [],
he: []
};
function pusher(arg) {
for (var i = 0; i < arg.length; i++) {
// Check to ensure length is at least 2 characters.
if(arg[i].length < 2)
continue;
var a = arg[i].slice(0, 2);
// Check to ensure value exists in myArrays.
if(myArrays[a])
myArrays[a].push(arg[i]);
}
}
当然,我已经添加了额外的验证,所以它结束了大量的行仍然。但它更容易重用,更适合您的场景。
下面是一个工作示例
如果你只有4个数组,那么这很好,但也许这是一个削减的例子?如果是这种情况,您可能需要考虑动态创建数组。举个简单的例子:
var myArrays = {};
myArrays['cl'] = [];
myArrays['di'] = [];
// etc...
您可以使用此方法创建任意数量的列表,如果需要,甚至可以基于某些列表。