我将如何继续缩短以下代码?
if (typeof dIndex === 'undefined') {
dPolylines = [];
} else {
if (typeof rIndex === 'undefined') {
dPolylines[dIndex] = [];
} else {
dPolylines[dIndex][rIndex] = [];
}
}
我觉得这8行代码最多可以很容易地转换为3行,但我对如何处理它没有正确的想法。
在我的代码中,我将需要这段代码几次。
答案 0 :(得分:1)
Archer's comment已应用于您的代码:
if (typeof dIndex === 'undefined') {
dPolylines = [];
} else if (typeof rIndex === 'undefined') {
dPolylines[dIndex] = [];
} else {
dPolylines[dIndex][rIndex] = [];
}
不短,但仍然可以理解(可能比原始代码更多)。
答案 1 :(得分:1)
为了缩短它而不失去任何可读性,我建议稍微修剪一下......
if (typeof dIndex === 'undefined') {
dPolylines = [];
}
else if (typeof rIndex === 'undefined') {
dPolylines[dIndex] = [];
} else {
dPolylines[dIndex][rIndex] = [];
}
你可以更进一步,删除这样的大括号......
if (typeof dIndex === 'undefined') dPolylines = [];
else if (typeof rIndex === 'undefined') dPolylines[dIndex] = [];
else dPolylines[dIndex][rIndex] = [];
我个人不喜欢它,因为它比使用大括号时更容易导致错误,但每个都是他们自己的。它仍然可读,现在只有3行。
为了两全其美,你可以简单地重新格式化我提出的第一个建议,如果我看到你的任何代码,就会让我感到畏缩:p
if (typeof dIndex === 'undefined') { dPolylines = []; }
else if (typeof rIndex === 'undefined') { dPolylines[dIndex] = []; }
else { dPolylines[dIndex][rIndex] = []; }
答案 2 :(得分:0)
typeof dIndex !== 'undefined' ? dPolylines = [] : ElseCheck()
function ElseCheck(){
typeof rIndex !== 'undefined' ? dPolylines[dIndex][rIndex] = [] : dPolylines[dIndex] = []
}
尝试三元条件
答案 3 :(得分:0)
function straightFill(obj, keys) {
obj = obj || {};
var cur = obj;
var key = keys.shift();
while (typeof key != 'undefined') {
cur[key] = {};
cur = cur[key];
key = keys.shift();
}
console.log(JSON.stringify(obj));
return obj;
}
var a = {};
straightFill(a, ['key1', 'key2']); // {"key1":{"key2":{}}}
straightFill(null, [undefined, 'key2']); // {}
straightFill(null, ['key1', undefined, 'key2']);// {"key1":{}}
为什么我使用对象代替数组? 您不应该使用带有序列号或非数字键的数组:
>> a = []
<< []
>> a['key'] = 5
<< 5
>> a
<< []
>> a.key
<< 5
>> a[2] = 4
<< 4
>> a
<< [undefined × 2, 4]
>> a.length
<< 3
>> Object.keys(a)
<< ["2", "key"]
三元解决方案:
typeof dIndex == 'undefined' ? dPolylines = [] :
typeof rIndex == 'undefined' ? dPolylines[dIndex] = [] :
dPolylines[dIndex][rIndex] = [];
答案 4 :(得分:0)
所以有一些解决方案可行。第一个是使用三元运算符,但它并不是那么干净:
typeof dIndex === 'undefined' ? dPolylines = [] : (typeof rIndex === 'undefined' ? dPolylines[dIndex] = [] : dPolylines[dIndex][rIndex] = []);
正如你所看到的,它太长了。考虑到Archer的回答,您将拥有以下内容:
if (typeof dIndex === 'undefined') {
dPolylines = [];
} else if (typeof rIndex === 'undefined') {
dPolylines[dIndex] = [];
} else {
dPolylines[dIndex][rIndex] = [];
}
这可归结为6行,但仍然很长。但由于我将在原始代码中多次需要这段代码,因此我将其转换为函数:
dPolylines = clearDirectionsArray(dPolylines, dIndex, rIndex);
function clearDirectionsArray(array, dIndex, rIndex) {
if (typeof dIndex === 'undefined') {
array = [];
} else if (typeof rIndex === 'undefined') {
array[dIndex] = [];
} else {
array[dIndex][rIndex] = [];
}
return array;
};
这最终会在整个代码中大幅降低行数。虽然最初没有提出这个问题。