写一个mySort函数,它接受一个整数数组,并且应该返回一个输入整数的数组,这些整数被排序,使得奇数首先出现,偶数出现最后。 所以: mySort([90,45,66,' bye',' 100.5']) 应该回来 [45,66,90,100]。
这是我的代码:
function mySort(array) {
var strArray = [];
var oddArray = [];
var evenArray = [];
var sortedArray = [];
var arrayLength = array.length
for (var i = 0; i <= arrayLength; i++) {
if (array[i] === 'string') {
strArray = array[i].push();
}
if (Math.floor().array[i] % 2 === 0) {
evenArray = array[i].push();
}
if (Math.floor().array[i] % 2 !== 0) {
oddArray = array[i].push();
}
}
sortedArray = sort(oddArray) + sort(evenArray);
}
console.log(mySort[90, 45, 66, 'bye', 100.5]);
&#13;
答案 0 :(得分:2)
有几个错误。
你没有回来:
function mySort(array) {
// ...
return sortedArray;
}
您应该将参数传递给Math.floor:
Math.floor(array[i]);
您应该将参数传递给array.push:
strArray.push(array[i]);
evenArray.push(array[i]);
oddArray.push(array[i]);
你应该结束:
sortedArray = oddArray.concat(evenArray);
现在它至少会运行。
您应该使用typeof :(排序字符串)
if (typeof array[i] === 'string') {
// ...
}
你应该使用if :(删除字符串)
if (typeof array[i] === 'string') {
// ...
}
else if (Math.floor(array[i]) % 2 === 0) {
// ...
}
else if (Math.floor(array[i]) % 2 !== 0) {
// ...
}
您的for循环应该更早结束:(删除undefined
)
for (var i = 0; i < arrayLength; i++) {
// ...
}
你应该发言:
evenArray.push(Math.floor(array[i]));
oddArray.push(Math.floor(array[i]));
最后,按顺序排列using a comparator:
sortedArray.sort(function (a, b) { return a - b; })
解决方案:
function mySort(array) {
var strArray = [];
var oddArray = [];
var evenArray = [];
var sortedArray = [];
var arrayLength = array.length;
for (var i = 0; i < arrayLength; i++) {
if (typeof array[i] === 'string') {
strArray.push(array[i]);
}
else if (Math.floor(array[i]) % 2 === 0) {
evenArray.push(Math.floor(array[i]));
}
else if (Math.floor(array[i]) % 2 !== 0) {
oddArray.push(Math.floor(array[i]));
}
}
sortedArray = oddArray.concat(evenArray);
sortedArray.sort(function (a, b) { return a - b; });
return sortedArray;
}
console.log(mySort([90, 45, 66, 'bye', 100.5])); // [45, 66, 90, 100]
答案 1 :(得分:2)
您没有return
声明。 JavaScript function
语法不会隐式返回最后一个表达式,除非在没有显式返回的情况下返回undefined
。
您应该.concat()
数组。 +
并没有做你想要的事情。
return sort(oddArray).concat(sort(evenArray));
这种情况不正确:
if(array[i] === 'string'){
您需要typeof
来检查会员的类型。
if(typeof array[i] === 'string'){
您的.push()
来电是错误的。我想你的意思是:
evenArray.push(array[i]);
您的递归调用应该使用mySort()
而不是sort()
。
strArray
和sortedArray
基本上被忽略了。
Math.floor()
期待一个论点。
Math.floor(array[i])
您的循环条件错误。它应该是i < arrayLength
,而不是<=
您的递归没有转义条款
您对mySort
的初始调用未使用括号来调用它。它应该是:
console.log(mySort([/*...array items...*/]));
您的if
条件应使用else
。如果它是一个字符串,你不需要再次测试它,假设它被排除在外。如果它不均匀,那么根据您的标准,您知道它很奇怪,因此不需要最后一个条件。
您显然希望尽可能将字符串转换为数字,并转换为整数。因此,您可以继续使用typeof
或parseInt
或+
转换它,而不是Number
检查,并检查它是否NaN
,如果是这样,将其传递,如果没有,请确保在将其测试为奇数/偶数之前将其转换为整数。
请注意,当函数体由单个表达式组成时,arrow functions会有隐式返回。
这是一个有上述更正的工作示例:
function mySort(array) {
var oddArray = [];
var evenArray = [];
var arrayLength = array.length;
for(var i = 0; i < arrayLength; i++) {
var n = Math.floor(Number(array[i]));
if (isNaN(n)) {
continue;
}
if (n % 2 === 0 ){
evenArray.push(n);
} else {
oddArray.push(n);
}
}
return oddArray.length < 1 ? evenArray :
evenArray.length < 1 ? oddArray :
mySort(oddArray).concat(mySort(evenArray));
}
console.log(mySort([90, 45, 66, 'bye', 100.5]));
&#13;
答案 2 :(得分:0)
通过对@llama的代码进行简单的改进,可以返回预期的结果。
我们只需要对oddArray和evenArray分别进行排序。
function mySort(nums) {
'use strict'
var array = nums
var strArray = [];
var oddArray = [];
var evenArray = [];
var sortedArray = [];
var arrayLength = array.length;
for (var i = 0; i < arrayLength; i++) {
if (typeof array[i] === 'string') {
strArray.push(array[i]);
}
else if (Math.floor(array[i]) % 2 === 0) {
evenArray.push(Math.floor(array[i]));
}
else if (Math.floor(array[i]) % 2 !== 0) {
oddArray.push(Math.floor(array[i]));
}
}
// sort oddArray
oddArray.sort(function (a, b) { return a - b; });
// sort evenArray
evenArray.sort(function (a, b) { return a - b; });
// make an array from both of them.
sortedArray = oddArray.concat(evenArray);
return sortedArray;
}