everycode
everycode copied to clipboard
2014年11月14日
//由于不明原因,Array的reverse方法消失在二次元空间了,Program ape, help me please.
Array.prototype.reverse = function(){
//代码实现写在这里,最后应该默认return this
};
题意第一版本有歧义时候理解错误的版本:
Array.prototype.reverse = function() {
return this.reduce(function(arr, e) {
arr.unshift(e);
return arr;
}, []);
};
var a = [1,2,3];
var b = a.reverse();
console.log(a);
console.log(b);
当前版本:
Array.prototype.reverse = function() {
for(var i = 0; i < this.length / 2; i++) {
var tmp = this[i];
this[i] = this[this.length - 1 - i];
this[this.length - 1 - i] = tmp;
}
return this;
};
var a = [1,2,3];
var b = a.reverse();
console.log(a);
console.log(b);
@XadillaX
..........
@XadillaX 赞一个
Array.prototype.reverse = function () {
var re = [], len = this.length - 1;
for (var i = 0; i <= len; i++) {
re[len - i] = this[i];
}
return re;
}
var a = [1,2,3];
var b = a.reverse();
console.log(a);
console.log(b);
@jsenjoy 你已经 new 了一个数组了。返回的跟 this 的引用已经不同了 -。 -
@XadillaX 和你刚开始的理解一样..以为原数组不变..没想到题目改了
@jsenjoy 实际上题目改了题意没变,只不过之前的题意有歧义,我们理解错了而已。
@XadillaX 嗯,这样的话,实现和你更新的一样,暂时没其他想法
Array.prototype.reverse = function(){ //代码实现写在这里,最后应该默认return this for(var i=0,len=this.length-1,initLen=this.length; i<=len; len--){ this.push(this[len]) } this.splice(0,initLen) return this; };
这样子呢?
function reverse(arr){
var s = JSON.stringify(arr);
var o = [];
var reg = /(\w+)/g;
while(match = reg.exec(s)){
o.unshift(match[0]);
}
return o;
}
只考虑的\w的情况