JS 不使用临时数组变量删除所有偶数项
var arr = [0,1,2,3,4,5,6,7,8,9];
删除arr中的所有偶数项,
要求
- 不使用临时数组变量
- 考虑连续奇偶项的情况
- 尽情想像
以下是群中以及我自己想到的方法
我听看到问题想到的方法
arr = arr.join(',').replace(/\d+,(\d+)(,?)/g, "$1$2").split(','); console.log(arr);不足:
- 未考虑连续奇偶情况
- 变量的类型全转为String了
伟哥的方法
for(var i =0,len = arr.length;i<len ;i++){ if(arr[len -i-1]%2 == 0){ arr.splice(len -i-1,1) } } console.log(arr);刚子想像中的方法
arr.join(',').repalce(/(\d+)(,?)/g, function($0, $1, $2){ return ($1 && $1%2 == 0) ? $1 + $2 : ''; }).split(','); console.log(arr);不足
- 变量的类型全转为String了
- 可能会在结果中加入一空项
再次看下,这就是对数组做过滤嘛,高级一点的方法
var arr = arr.filter(function(item){ return item%2 == 1 }); console.log(arr);不足:
- IE6/7歇菜了,不工作了
sfai写的
var temp = []; while(arr.length){ if(arr[arr.length-1]%2==1){ temp.push(arr[arr.length-1]); } arr.length = arr.length - 1; } arr = temp; console.log(arr);
这方法使用了temp这数组变量不满足题目要求~~~~
刚子写的
for(var i = 0, j = 0, len = arr.length; i < len; i++){ i % 2 == 0 && (arr.splice(j, 1), j++); } console.log(arr);苟子写的
for(var len = arr.length; len > -1; len--){ len % 2 == 0 && arr.splice(len, 1); } console.log(arr);
上面两位果然有愿啊!下面省略几万字。。。。。
我再来了一个
var i = 0 while(i != arr.length){ if(arr[i]%2 == 0) arr.splice(i, 1); else i++ } console.log(arr);上一方法的缩减版
var i = 0; while(i != arr.length){ if(arr[i++]%2 == 0) arr.splice(--i, 1); } console.log(arr);