答案 0 :(得分:3)
您无法处理的指令中有一个重要部分:
如果数组有0或1个值或者为null或None,则您的方法应返回一个空数组。
function averages(numbers) {
if (!numbers) return []; // return empty array
for(var i=0; i<numbers.length; i++){
if(numbers.length < 2 || numbers[i] === ""){
return [];
} else {
numbers[i] = (numbers[i] + numbers[i+1]) / 2;
}
}
numbers.pop();
return numbers
}
答案 1 :(得分:1)
您只需要测试参数是否为空
//test if numbers is null
if(numbers == null){
return [];
}
for(var i=0; i<numbers.length; i++){
if(numbers.length < 2 || numbers[i] === ""){
return [];
} else {
numbers[i] = (numbers[i] + numbers[i+1]) / 2;
}
}
numbers.pop();
return numbers
答案 2 :(得分:0)
class TableViewController: UITableViewController {
let tableData = ["Matthew", "Mark", "Luke", "John"]
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableData.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
cell.textLabel?.text = tableData[indexPath.row]
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
//Did this part as comments to try to do this outside the class
// self.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480)
// self.tableView = UITableView(frame:self.view.frame)
// self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.view.addSubview(self.tableView)
}
}
let frame = CGRect(x: 0, y: 0, width: 320, height: 480)
let tableView = UITableView(frame: frame, style: .plain)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
PlaygroundPage.current.liveView = TableViewController()
只需在ur数字变量中添加空检查。那你很高兴。
答案 3 :(得分:0)
更正您的代码:
function averages(numbers) {
if (!Array.isArray(numbers)) {
return [];
}
for(var i=0; i<numbers.length; i++){
if(numbers.length < 2){
return [];
} else {
numbers[i] = (numbers[i] + numbers[i+1]) / 2;
}
}
numbers.pop();
return numbers
}
我使用Array.isArray
来检查它是否真的是一个数组。它是一个内置函数,所以你应该使用它。
您可以一步检查这个和长度,节省更多步骤(请参见下面的示例)。
提供更清洁的解决方案:
function averages(numbers) {
if (!Array.isArray(numbers) || numbers.length < 2) {
return [];
}
for(var i = 0; i < numbers.length - 1; i++){
numbers[i] = (numbers[i] + numbers[i + 1]) / 2;
}
numbers.pop();
return numbers
}
它工作正常,我还添加了一个&#34; -1&#34;循环,因为最后一个数字将成为&#34; NaN&#34; (不是数字),因为它之后没有元素和(10 + undefined) / 2 => NaN / 2 => NaN
。这也为您的算法添加了不必要的步骤。
另一个解决方案可能是Array:map:
function averages(numbers) {
if (!Array.isArray(numbers) || numbers.length < 2) {
return [];
}
numbers.map(function(val, idx, arr) {
arr[idx] = (val + arr[idx+1]) / 2;
});
numbers.pop();
return numbers;
}