功能重复相同的数字y次

时间:2018-02-20 10:03:00

标签: javascript

我正在尝试编写一个返回数字x的函数。多次。该函数应该能够接收多个2d数组。每个输入数组只有2个元素。

所以例如:function([4,3] [2,2] [12,5]) //输出应该是:444,22,1212121212

我已经解决了大部分问题但是当x是2位数时我被卡住了。 会很感激帮助解决这个问题。我必须将解决方案作为带有逗号(',')的字符串返回,该逗号分隔不同的数组。 这是我现在的代码:

 function repeatnumber(data){
    var result = " "; 
    for (var i = 0; i < data.length; i++){
            if (Array.isArray(data[i])){
                var x = data[i][0]
                var y = data[i][1]
                for(var j = 1; j <= y; j++){
                    result = result + x;
                }
            }
        }
    var number = result
    var answer = number.match(/(\d)\1*/g)
    return console.log(answer);
}

repeatnumber([[10, 2][11,1]])// DOESN'T WORK!! output must be: 1010,11
repeatnumber([[1, 2], [2, 3]]) //works
repeatnumber([[1, 4], [3, 6], [9, 2]]) //works

9 个答案:

答案 0 :(得分:2)

您可以检查是否有嵌套数组并映射新值,然后使用逗号连接所有数组。

&#13;
&#13;
function repeatnumber(array) {
    return (Array.isArray(array[0]) ? array : [array])
        .map(([value, length]) => Array.from({ length }, _ => value).join(''))
        .join(', ');
}

console.log(repeatnumber([42, 7]));
console.log(repeatnumber([[10, 2], [11,1]]));
console.log(repeatnumber([[1, 2], [2, 3]]));
console.log(repeatnumber([[1, 4], [3, 6], [9, 2]]));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

如果您使用的是es6,这可能是最简单的。

let repeatnumber = (inputArr) => {
  return inputArr.map((inp) => `${inp[0]}`.repeat(inp[1]));
}

答案 2 :(得分:0)

两个数组之间缺少逗号,使其成为

repeatnumber([[10, 2],[11,1]])

此外,当您添加两位数字时,正则表达式无法正常工作,将逻辑更改为

function repeatnumber(data) 
{
    var answer = [];
    for (var i = 0; i < data.length; i++)
    {
        if (Array.isArray(data[i]))
        {
            var x = data[i][0]
            var y = data[i][1]
            result = "";
            for(var j = 1; j <= y; j++)
            {
                  result = result + x;
            }
            answer.push(result)
        }
    }

    return answer;
}

<强>演示

&#13;
&#13;
function repeatnumber(data) {
  var answer = [];
  for (var i = 0; i < data.length; i++) {
    if (Array.isArray(data[i])) {
      var x = data[i][0]
      var y = data[i][1]
      result = "";
      for (var j = 1; j <= y; j++) {
        result = result + x;
      }
      answer.push(result)
    }
  }

  return answer;
}
console.log(repeatnumber([
  [10, 2],
  [11, 1]
])) ;

console.log(repeatnumber([
  [1, 2],
  [2, 3]
])) ;

console.log(repeatnumber([
  [1, 4],
  [3, 6],
  [9, 2]
])) ;
&#13;
&#13;
&#13;

修改

使用fillreduce

的更简洁的方法
function repeatnumber(data) 
{
    return data.map( s => Array( s[1] ).fill( "" ).reduce( (a,c) => a + s[ 0 ], "" ) )
}

或使用filljoin

function repeatnumber(data) 
{
    return data.map( s => Array( s[1] + 1 ).fill( "" ).join( s[ 0 ] ) )
}

答案 3 :(得分:0)

这是解决方案之一。

function repeatNumber(data) {
var results = '';
data.forEach(function(arr) {
    for(var i = 0; i< arr[1]; i++) results += arr[0].toString();
  results += ',';
})
return results.substring(0, results.length - 1);
}
console.log(repeatNumber([[10, 2], [11,1]]));
console.log(repeatNumber([[1, 2], [2, 3]]));
console.log(repeatNumber([[1, 4], [3, 6], [9, 2]]));

答案 4 :(得分:0)

正如您所注意到的,正则表达式并非最佳选择。你提出的问题比它需要的要困难得多。您可以只创建每个字符串的数组,然后将它们join组合在一起。此外,更多描述性变量名称对您来说将有很长的路要走。

&#13;
&#13;
let data = [[10,2], [11,1]]
function repeatNumber(data) {
 let resultArray = []    
  for (let i=0; i < data.length; i++) {
    let num = data[i][0]
    let times = data[i][1]
    let newString = ""
    for (let j=0; j < times; j++) {
      newString += num
    }
    resultArray.push(newString)
  }
  return resultArray.join(", ")
}

console.log(repeatNumber(data))
&#13;
&#13;
&#13;

如果您对代码高尔夫解决方案感到满意,这将完成相同的任务:

data.map(([num, times]) => Array(times).fill(num).join("")).join(", ")

答案 5 :(得分:0)

试试这个:

function repeatnumber(data) {

var result = "";

for (var i = 0; i < data.length; i++)
{
    if (Array.isArray(data[i]))
    {
        var x = data[i][0]
        var y = data[i][1]


        for(var j = 1; j <= y; j++)
          {

            {
              result = result + x;
            }

          }
    }
    if(i != data.length - 1)
       result += " ";
}

 var number = result
 var split = number.split(" ");
 //var answer = number.match(/(\d)\1*/g)
 return console.log(split);
}

repeatnumber([[10,2] [11,1]])应该是重复数字([[10,2],[11,1]]);

答案 6 :(得分:0)

ES6解决方案

&#13;
&#13;
const repeat = (arr) => {
  arr.map( v => {
    const str = new Array(v[1] + 1).join(v[0]);
    console.log(str); // save this in array or wherever u want.
  })
};

repeat([[1, 4], [3, 6], [9, 2]])
&#13;
&#13;
&#13;

答案 7 :(得分:0)

有效的小代码,

// iterate > create array and join with char > join parent array with comma

function repeatnumber(data){
    if(!data || data.length < 1) return [];

  return data.map(arr => Array(arr[1] + 1).join(arr[0])).join(','); 
}

更好的方法,感谢Ariz

function repeatnumber(data) {
    if (!data || data.length < 1) return [];

    return data.map((arr) => `${arr[0]}`.repeat(arr[1])).join(',');
}

无需创建额外的阵列,因此可以轻松完成大量重复。

答案 8 :(得分:0)

通过嵌套模板文字和.reduce()单手传递。

var a = [[10, 2], [11,1]],
    b = [[1, 2], [2, 3]],
    c = [[1, 4], [3, 6], [9, 2]],
    f = a => a.reduce((r,[v,c],i) => `${i ? `${r},`:``}${`${v}`.repeat(c)}`,``);

console.log(f(a));
console.log(f(b));
console.log(f(c));