我有一个数组,我正在寻找一个新的数组,由重复3次的原始数组内容组成。例如:
var array = ["red", "green", "blue"];
newArray = ["red red red", "green green green", "blue blue blue"];
到目前为止我的代码:
var triples = myArray.map(function(){
for (x = 0; x < myArray.length; x++){
return myArray[x].repeat(3);
};
});
console.log(triples);
但这只会返回
triples = ["redredred", "redredred", "redredred"];
对新手的任何建议?
答案 0 :(得分:1)
您可以构建一个简单的函数来执行此操作:
var triples = function(xs) {
return xs.map(function(x) {
return [x,x,x].join(' ')
})
}
您可以将它抽象一点,作为与map
一起使用的转换,并允许任意数量的重复:
var repeat = function(n) {
return function(x) {
return Array.apply(0, {length:n})
.map(function(){return x})
.join(' ')
}
}
['foo','bar','lol'].map(repeat(3))
//^ ['foo foo foo', 'bar bar bar', 'lol lol lol']
答案 1 :(得分:0)
这是一种令人讨厌的简单方法,可以重复所有元素3次:
["red", "green", "blue"].map( [].join.bind(['',' ',' ','']) );
// == ["red red red", "green green green", "blue blue blue"]
此方法也不需要“”.repeat(),但尚未得到普遍支持。
另一个好处:如果数组中的数字,空值或其他非字符串潜行,它将不会中断。
如果你想让它重复使用,这很容易:
var repeater = [].join.bind(['',' ',' ','']) ;
["red", "green", "blue"].map( repeater );
// == ["red red red", "green green green", "blue blue blue"]
[1,2,3,4,5].map( repeater );
// == ["1 1 1", "2 2 2", "3 3 3", "4 4 4", "5 5 5"]
答案 2 :(得分:0)
没有理由使用map
和循环。我想你也想要
var triples = myArray.map(function(str){
return str.repeat(3);
});
console.log(triples);
或
var triples = [];
for (var x = 0; x < myArray.length; x++) {
triples[x] = myArray[x].repeat(3);
}
console.log(triples);
但是,正如@digitalfresh在评论中提到的那样,String::repeat
不插入空格,因此您更愿意使用(" "+…).repeat(3).slice(1)
或使用@dandavis或@elclanrs提供的函数。或者,既然您似乎使用了Ecmascript 6方法,那么您可以Array.from({length:3}, ()=>…).join(" ")
。