我希望make [1,2,3,4,5].duplicated()
有效,但是当我写道:
Array.prototype.duplicator = function (){
var a = [];
for(var i=0;i<10;i+=2){
a[i]=this[i];
a[i+1]=this[i];
}
return a;
};
[1,2,3,4,5].duplicator();
它返回[1, 1, 3, 3, 5, 5, undefined, undefined, undefined, undefined]
而不是[1,1,2,2,3,3,4,4,5,5]
。谁能告诉我为什么它不起作用?
答案 0 :(得分:4)
Array.prototype.duplicator=function()
{
return this.concat(this)
}
alert([1,2,3,4,5].duplicator());
答案 1 :(得分:1)
你可以map
并且为了更具功能性的方法而变得扁平化:
Array.prototype.duplicate = function() {
return [].concat.apply([], this.map(function(v) {
return [v,v];
}));
};
console.log([1,2,3].duplicate()); //=> [1,1,2,2,3,3]
答案 2 :(得分:1)
最简单的答案应该是:
Array.prototype.duplicator=function () {
return this.concat(this).sort();
}
console.log([1,2,3,4,5].duplicator());//[1,1,2,2,3,3,4,4,5,5]
答案 3 :(得分:0)
因为你在每次迭代时都加2,所以超越了数组边界。试试这个:
for (var i=0; i<this.length; i++) {
a.push(this[i]);
a.push(this[i]);
}
答案 4 :(得分:0)
您希望将每个值放在i*2
和i*2+1
中,而不是i
和i+1
,并一次循环一步:
Array.prototype.duplicator = function (){
var a = [];
for(var i = 0; i < this.length; i++){
a[i*2] = this[i];
a[i*2+1] = this[i];
}
return a;
};
答案 5 :(得分:0)
这是一个修复:
Array.prototype.duplicator = function() {
var dup = [];
for (var i = 0; i < this.length; i++) {
dup[2 * i] = dup[2 * i + 1] = this[i];
}
return dup;
};
console.log([1,2,3,4,5].duplicator());
答案 6 :(得分:0)
Array.prototype.duplicator = function () {
var a = [], k = 0;
for(var i=0;i<this.length;i++) {
a[k]=this[i];
k++;
a[k]=this[i];
k++;
}
return a;
};
答案 7 :(得分:0)
duplicator = val => val.concat(val);
答案 8 :(得分:0)
这对我来说是按照https://github.com/h5bp/Front-end-Developer-Interview-Questions/blob/master/src/questions/javascript-questions.md中的情况进行的,其中期望的结果为[1、2、3、4、5、1、2、3、4、5]。希望它对您有用!
const duplicate = (...nums) => [].concat(...nums, ...nums);
console.log(duplicate([1, 2, 3, 4, 5]));