从数组的索引值中打印取值的数量

时间:2016-11-30 17:34:36

标签: javascript arrays

最近参加了面试,有人提出如下问题:

var array = [0,1,2,3,4,5];

输出:

  temp:
    temp1:1
    temp22:22
    temp333:333
    temp4444:4444
    temp55555:55555

我尝试了下面的代码它工作正常但是这个例子有任何最佳解决方案:

array.forEach(function(item,index){
      var text ="";
        if(index >= 2){
               for(var j =1; j <= index; j++){
               text += index;
               }
                console.log("temp"+text + ":" + text);
        }else{
        console.log("temp"+index + ":" + index);
        }
});

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以迭代数组并迭代计数。然后显示新字符串。

&#13;
&#13;
var array = [0, 1, 2, 3, 4, 5];

array.forEach(function (a, i) {
    var s = '';
    while (i--) {
        s += a;
    }
    console.log ('temp' + s + ':' + s);
});
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用ES6 template stringsString.prototype.repeat

var array = [0,1,2,3,4,5];

array.forEach(item => {
  const text = String(item).repeat(item);
  console.log(`temp${text}: ${text}`);
})

将相同的代码翻译成ES5 - 这将适用于从IE9及以上版本开始的所有浏览器。

var array = [0,1,2,3,4,5];

array.forEach(function(item) {
  var text = Array(item+1).join(item);
  console.log("temp" + text + ": " + text);
})

由于ES5中不存在String.prototype.repeat,因此生成具有重复字符的特定长度的字符串会有一些黑客攻击: Array(initialCapacity)将创建一个新的数组,其中的空插槽等于您传入的数字,然后可以使用Array.prototype.join将数组的所有成员连接成一个字符串。参数.join需要的是您想要的分隔符,因此,例如,您可以执行类似这样的操作

var joinedArray = ["a","b","c"].join(" | ");

console.log(joinedArray);

但是,在这种情况下,阵列的每个成员都是空白的,因为阵列只有空白插槽。因此,在加入时,除非指定分隔符,否则将获得空白字符串。您可以利用它来获得重复功能,因为您实际上正在做这样的事情

//these produce the same result
var repeatedA = ["","",""].join("a");
var repeatedB = Array(3).join("b");

console.log("'a' repeated:", repeatedA);
console.log("'b' repeated:", repeatedB);

使用Array功能,您可以将其缩放到任意数量的重复。唯一的技巧是你需要在创建数组时添加1,因为你在加入时会少一个字符。