在JavaScript中过滤数组,而不使用任何内置函数或新数组
Filtering an array in JavaScript with out using any built in functions or a new array
我有一个最小值和最大值。遍历一个数组,我需要删除所有在min和max之间的元素。我不能使用任何内置的数组函数,如splice,数组需要保持在原来的顺序。例如,数组[1,5,13,27,58]min = 10 max = 30将返回一个数组[1,5,58]。我在寻找更多的策略如何在N时间复杂度下做到这一点。这个问题是为面试准备的。
这是我试过的代码,
function filter_range(array, min, max) {
for (var i = 0; i < array.length; i++) {
if (min < array[i] && array[i] < max) {
for (var j = i; j < array.length - 1; j++) {
var temp = array[j]
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
var array = [1, 5, 23, 13, 59];
filter_range(array, 10, 30);
for (var i = 0; i < array.length; i++) {
console.log(array[i])
}
只需用适合该范围的下一个值覆盖数组中的第N个元素就可以实现这一点,其中N是到目前为止发现的值的数量。然后将数组的length
设置为您找到的值的数量。
function filter_range(array, min, max) {
var nextIndex = 0;
for (var i = 0, len = array.length; i < len; i++) {
var value = array[i];
if (value >= min && value <= max) {
array[nextIndex++] = value;
}
}
array.length = nextIndex;
}
function test(arr, min, max) {
console.log('Input: ' + arr.join(', '));
console.log('Range: [' + min + ', ' + max + ']');
filter_range(arr, min, max);
console.log('Output: ' + arr.join(', '));
console.log('');
}
test([1, 2, 3], 1, 2);
test([1, 2, 3], 2, 3);
test([1, 2, 3, 4, 5], 2, 4);
test([1, 2, 3], 0, 100);
test([1, 5, 13, 27, 58], 10, 30);
test([1, 13, 5, 58, 27], 10, 30);
我能想到的最简单的方法是将好的值移动到一个新的数组
function run(){
var a = [1,5,13,27,58];
var b = [];
var min = 10;
var max = 30;
alert (a);
for (i=0;i<a.length;i++){
if (a[i]>max || a[i]<min) {
b.push(a[i]);
}
}
alert (b);
}
相关文章:
- 数组函数不适用于从元素文本创建的JavaScript数组
- 如何在javascript中求解pack数组函数
- 制作一个javascript的数组函数
- 获取元素的位置并创建它的数组函数
- 茉莉花中的 SpyOn javascript 数组函数
- 自定义数组函数不接受参数
- 使用原型的自定义数组函数.新的 MyArray(1,2,3,4) 不工作
- Java 脚本随机化数组函数
- 在 Restangular 集合上使用 lodash 数组函数
- 比较数组函数返回未定义
- Javascript中嵌套for循环与数组函数的性能
- 多维数组函数在JS中不起作用
- Javascript数组函数有我看不到的错误
- 数组函数外的javascript
- 在数组/函数中循环时使用换行符
- 拼接javascript数组函数获胜't删除项目
- 为什么不'这个js数组函数不能工作
- 如何在我自己的数组原型函数中使用数组函数
- 在javascript中定义数组函数
- Jquery动态树数组函数