如何使用“原生”JavaScript最简单地复制JavaScript数组中的每个元素?
顺序很重要。
例如:
a = [2, 3, 1, 4]
// do something with a
a
// a is now [2, 2, 3, 3, 1, 1, 4, 4]
如何使用“原生”JavaScript最简单地复制JavaScript数组中的每个元素?
顺序很重要。
例如:
a = [2, 3, 1, 4]
// do something with a
a
// a is now [2, 2, 3, 3, 1, 1, 4, 4]
我想到了与tymeJV的答案类似的东西
[2, 3, 1, 4].reduce(function (res, current, index, array) {
return res.concat([current, current]);
}, []);
index
,array
)需要存在,如果我没有看到它们被使用。有人可以解释一下吗? - MarksCode[2,3,1,4].reduce((a,i)=>a.concat(i,i),[])
更易读,或者使用 a.concat(Array(10).fill(i))
,如果 i 是一个对象且需要克隆则可以使用 map。 - user120242基本上你可以在ES19中使用flatMap
。
a = [1, 2, 3, 4];
a.flatMap(i => [i,i]); // [1, 1, 2, 2, 3, 3, 4, 4]
您也可以像这样自定义重复次数:
a = [1, 2, 3, 4];
const dublicateItems = (arr, numberOfRepetitions) =>
arr.flatMap(i => Array.from({ length: numberOfRepetitions }).fill(i));
dublicateItems(a, 3);
我回复下面@user120242的评论 为什么要这么复杂? a.flatMap(i => Array(n).fill(i)) 在这里找到它
a.flatMap(i => Array(n).fill(i))
的意思是将数组a中的每个元素重复n次,并将结果平铺成一个新数组。 - user120242基本上:
a = [2, 3, 1, 4];
b=[];
for(var i = 0; i< a.length;++i){
b.push(a[i]);
b.push(a[i]);
}
a=b;
a.length
的复杂度应为O(1),因为JS中数组长度应实现为常数。请参见https://dev59.com/AVwY5IYBdhLWcg3wPFuo以获取更多信息。 - morels我在我的应用程序中遇到了这个问题,因此我创建了这个函数:
function duplicateElements(array, times) {
return array.reduce((res, current) => {
return res.concat(Array(times).fill(current));
}, []);
}
要使用它,只需传递数组和您想要元素被复制的次数:
duplicateElements([2, 3, 1, 4], 2);
// returns: [2, 2, 3, 3, 1, 1, 4, 4]
return [...res,...Array(times).fill(current)];
- mekb我猜你可以这样:
var duplicated = a.map(function(item) {
return [item, item];
}).reduce(function(a, b) { return a.concat(b) });
//duplicated: [2, 2, 3, 3, 1, 1, 4, 4]
.map
是 ES5。 - tymeJVArray.prototype.map
,只要是标准浏览器或IE8+,就没有问题。 - axelduch使用循环和push非常基本的代码片段。
这是一个动态函数,因此您可以指定复制器来重复值的数量。
函数名称duplicate
语法:duplicate (array, duplicator)
它的工作原理:函数接受两个参数数组和duplicator,它基于duplicator构建新数组并返回新构建的数组。
代码片段
function duplicate(array, duplicator){
var buildArray = [];
for(i=0; i<array.length; i++){
for(j=0; j<duplicator; j++){
buildArray.push(array[i]);
}
}
return buildArray;
}
使用方法
var a = [2, 3, 1, 4];
var result = duplicate(a, 2);
console.log(result);
基于axelduch的回答,介绍ES6编程方式
const arr = [2, 3, 1, 4].reduce((res, current) => [...res, current, current], []);
console.log(arr);
function duplicate(arr) {
return arr.concat(arr).sort()
}
console.log(duplicate([1,2,3,4,5]))
怎么样?
for (i=a.length-1;i>=0;i--)a.splice(i,0,a[i]);
反向迭代往往被低估,但在这种情况下它可以保持索引不变 ;)
只需拼接一点。
var a = [2, 3, 1, 4],
i = a.length;
while (i--) {
a.splice(i, 0, a[i]);
}
document.write('<pre>' + JSON.stringify(a, 0, 4) + '</pre>');
a = a.join(',').replace(/(\d+)/g, "$1,$1").split(',').map(Number);
- Tushar