我怎样才能制作一个也有条件的单行返回线?例如,如果我想做一个“返回中位数”:
//assuming sorted input array
return ((inputArray.length % 2) && (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2) || inputArray[int(inputArray.length/2)+1];
有没有办法使这项工作?
我怎样才能制作一个也有条件的单行返回线?例如,如果我想做一个“返回中位数”:
//assuming sorted input array
return ((inputArray.length % 2) && (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2) || inputArray[int(inputArray.length/2)+1];
有没有办法使这项工作?
您应该使用三元运算符:
return (inputArray.length % 2 != 0) ? (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2 : inputArray[int(inputArray.length/2)+1];
这相当于:
if (inputArray.length % 2 != 0) {
return (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2;
} else {
return inputArray[int(inputArray.length/2)+1];
}
如果你只想使用&&
and ||
,你可以使用以下(这不是一个很好的编程风格):
((inputArray.length % 2 != 0) || return inputArray[int(inputArray.length/2)+1]) && return (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]);
这相当于:
(condition || return value2) && return value1;
因此,由于布尔运算符的短路评估:
condition
是true
,return value2
不会被评估并且return value1
会被执行。condition
是false
,return value2
将被评估。我会选择一个更易读的版本,没有重复,但有一些变量。
var index:int = int(inputArray.length / 2);
var item1:Number = inputArray[index];
var item2:Number = inputArray[index + 1];
var median:Number = (item1 + item2) / 2;
return (inputArray.length % 2 != 0) ? median : item2;
请尝试修改条件:
return ((inputArray.length % 2) && (((inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2) || inputArray[int(inputArray.length/2)+1]));