打印一个新数组,其中所有元素都将大于/小于特定数字



我使用代码更改了问题,代码取自下面的注释。我添加了两个条件,还有一个问题,我认为问题在缩进中!如果你在我的代码中看到错误,请检查并告诉我!

function filterNums (array, num, condition) {
var outputarray = [];
for (let i = 0; i < array.length; i = i + 1) {
if (condition == "greater"){
if (array[i] > num) {
outputarray.push(array[i]); // put the array number in to the output array
}
} else if (condition == "less") {
if (array[i] < num) {
outputarray.push(array[i]); // put the array number in to the output array
}
}   else if (condition!=='undefined'){
if (array[i] > num){
outputarray.push(array[i])
}
}   else if (num!=='undefined' && condition!=='undefined')
if (array[i] > 0){
outputarray.push(array[i])
}

}
return outputarray;

}

console.log(filterNums([-3,3,4,0,44,-11,5]((;

输出的结果必须是:[3,4,44,5]但我得了[]。我的代码有什么问题?所以在输入数据中,我们没有num和condition,只有数组。它必须返回数组中的所有正数。

您可以通过使用Array.prototype.filter内置函数来实现这一点:

const filterNums = (arr, val, condition) =>
arr.filter(item => (condition === 'greater' ? item > val : item < val));
console.log(filterNums([-1, 2, 4, 0, 55, -12, 3], 11, 'greater')); //[ 55]
console.log(filterNums([-2, 2, 3, 0, 43, -13, 6], 6, 'less')); // [-2, 2, 3, 0, -13]
console.log(filterNums([-2, 2, 3, 0, 43, -13, 6], -33, 'less')); //  []

我将为这个好主意编写一个简单的Javascript基本代码。您可以像前面的答案(filter(一样使用内置函数,但首先尝试在没有

内建函数

/*
filterNums([-1, 2, 4, 0, 55, -12, 3], 11, 'greater');  //[ 55]
filterNums([-2, 2, 3, 0, 43, -13, 6], 6, 'less'); // [-2, 2, 3, 0, -13]
filterNums([-2, 2, 3, 0, 43, -13, 6], -33, 'less'); //  []*/
function filterNums (array, num, condition) {
var outputarray = [];
for (let i = 0; i < array.length; i = i + 1) {

if (num != undefined) {

if (condition == undefined || condition == "greater") {
if (array[i] > num) {
outputarray.push(array[i]); // put the array number in to the output array
}
} else if (condition == "less") {
if (array[i] < num) {
outputarray.push(array[i]); // put the array number in to the output array
}
}
} else {
if (array[i] > 0) {
outputarray.push(array[i]); // put the positive array number in to the output array
}
}
}

return outputarray;
}
console.log(filterNums([-1, 2, 4, 0, 55, -12, 3], 11, 'greater'))
console.log(filterNums([-2, 2, 3, 0, 43, -13, 6], 6, 'less'))
console.log(filterNums([-2, 2, 3, 0, 43, -13, 6], -33, 'less'))
// New Edit
console.log(filterNums([-3, 3, 4, 0, 44, -11, 5]));
// New Edit
console.log(filterNums([-3, 3, 4, 0, 44, -11, 5], 9));

如果你有任何问题,请评论。

必须说的一切都可以在讨论OP方法的评论中找到。因此,实现是唯一可以提供的东西。。。

// quote from the OP's first provided question / version ...
// "by default, the number is 0, and the last parameter is 'greater'"
function filterNumberValues(arr, val, condition) {
// be failsave, sanitize the number value.
val = Number(val);
val = Number.isNaN(val) ? 0 : val;
const lookupTable = {
// discouraged non standard usage
'GREATER': num => num > val,
'LOWER': num => num < val,
'LESS': num => num < val,
// encouraged standard usage
'GTE': num => num >= val,
'GT': num => num > val,
'EQ': num => num === val,
'LT': num => num < val,
'LTE' : num => num <= val,
}
// be failsave, sanitize and transform the filter condition.
condition = String(condition).toUpperCase();
condition = lookupTable[condition] || lookupTable['GT'];
// use an array's native `filter` method.
return arr.filter(condition);
}
console.log(
filterNumberValues([-1, 2, 4, 0, 55, -12, 3], 4, 'greater')
); // [ 55 ]
console.log(
filterNumberValues([-1, 2, 4, 0, 55, -12, 3], 4, 'gt')
); // [ 55]
console.log(
filterNumberValues([-1, 2, 4, 0, 55, -12, 3], 4, 'gte')
); // [ 4, 55]
console.log('n');
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], 2, 'less')
); // [-2, 0, -13]
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], 2, 'lt')
); // [-2, 0, -13]
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], 2, 'lte')
); // [-2, 2, 0, -13]
console.log('n');

console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], -13, 'lt')
); //  []
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], -13, 'lte')
); //  [-13]
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], -13, 'eq')
); //  [-13]
.as-console-wrapper { min-height: 100%!important; top: 0; }

在不允许使用本机filter方法的情况下,可以通过例如while循环来实现自己的过程。。。

// quote from the OP's first provided question / version ...
// "by default, the number is 0, and the last parameter is 'greater'"
function filterNumberValues(arr, val, condition) {
// sanitize all arguments.
arr = Array.isArray(arr) && arr || [];
val = Number(val);
val = Number.isNaN(val) ? 0 : val;
condition = String(condition).toUpperCase();
condition = (
(condition === 'GREATER') ||
(condition === 'LESS')
) && condition || 'GREATER';
// pepare filter process.
const result = [];
let number;
const len = arr.length;
let idx = -1;
// do filter.
while (++idx < len) {
if (idx in arr) { // skip "holes" in array.
number = arr[idx];
if (
(condition === 'GREATER') 
? (number > val)
: (number < val)
) {
result.push(number);
}
}
}
return result;
}
console.log(
filterNumberValues([-1, 2, 4, 0, 55, -12, 3], 4, 'greater')
); // [ 55 ]
console.log(
filterNumberValues([-1, 2, 4, 0, 55, -12, 3], 54, 'GREATER')
); // [ 55]
console.log(
filterNumberValues([-1, 2, 4, 0, 55, -12, 3], 55, 'greater')
); // []
console.log('n');
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], 2, 'less')
); // [-2, 0, -13]
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], 0, 'LESS')
); // [-2, -13]
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], -2, 'LESS')
); // [-13]
console.log(
filterNumberValues([-2, 2, 3, 0, 43, -13, 6], -13, 'less')
); // []
.as-console-wrapper { min-height: 100%!important; top: 0; }

最新更新