Javascript - Array.repeat限制?

时间:2014-08-13 20:36:58

标签: javascript arrays

我有一个数组,我正在寻找一个新的数组,由重复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"];

对新手的任何建议?

3 个答案:

答案 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(" ")