使用字符串填充数组的最佳方法

时间:2016-03-07 23:30:22

标签: javascript jquery arrays

说我有一个数组:

NotificationListenerService

我可以像这样添加字符串:

android:enabled="@boolean/isLessThan18"

我想要做的是拥有一个这个字符串的数组。所以,例如,我希望newArray有50个'thisString'。

我可以通过循环轻松完成此操作:

<service>

但是说如果我有3个字符串:

AccessibilityService

我想推动第三次30次,第二次40次和第三次50次,是通过上面的循环这样做的唯一方法吗?或者我可以说

var newArray = [];

我想这样做,因为在我的项目中我可以拥有超过10个字符串。我知道这是为什么构建循环,但我想知道是否有更简单的方法来做到这一点。

可以使用JQuery。

5 个答案:

答案 0 :(得分:2)

要获得重复元素的数组,您可以使用此方法:

[undefined, undefined, undefined]

返回以下内容:

map

接下来,您可以使用count来投射预期值,从而有效地为您提供重复var value = 'hello'; var result = sizedArray.map(function(o) { return value; }); // ['hello', 'hello', 'hello'] 次的值数组:

function generateArray(value, size) {
  var sizedArray = Array.apply(null, Array(size));
  var result = sizedArray.map(function() {
    return value;
  });
  return result;
}

var firstArray = generateArray('first', 5);
var secondArray = generateArray('second', 10);
var thirdArray = generateArray('third', 15);
var result = firstArray.concat(secondArray).concat(thirdArray);
console.log(result);

综上所述,您的请求可以解决如下:

map

这种方法适用于任何字符串,甚至包含逗号的字符串,因为我们没有采用与逗号分开的方法,类似于注释中的解决方案,这些解决方案适用于有限的输入集。

JSBin:demo link

或者,如果您使用的是LoDash,则可以使用_.range method生成一个到Array.apply的数组,这将取代我对上面var range = _.range(4); // [0, 1, 2, 3] 的使用:

{{1}}

答案 1 :(得分:1)

我不确定我是否完全理解您所需的输出,但这可能是正确的代码。这将创建一个c长度的数组,然后使用字符串s填充每个索引。

function stringArrMaker(s, c) {
    return "#".repeat(c).split("").map(function () {
        return s;
    });
}

console.log(stringArrMaker("hello", 10));

使用c个值填充数组是一种愚蠢的方法。 String.repeat()将采用字符串并重复&#34;重复&#34;它在String中。因此"#".repeat(3);创建###,然后split()创建一个您想要的长度数组。

请注意String.repeat() does not have wide support。因此,您可能希望改为Array.apply(null, Array(count));。我只是用它代码打高尔夫球。

<强>输出

[ 'hello',
  'hello',
  'hello',
  'hello',
  'hello',
  'hello',
  'hello',
  'hello',
  'hello',
  'hello' ]

答案 2 :(得分:0)

为什么不这样做呢。这是最简单的解决方案。

String.prototype.rtoArray = function(number) {
  retArray = Array();
  for (i = 0; i < number; i++) {
    retArray[i] = String(this);
  }
  return retArray;
}

firstString = "first".rtoArray(50);
secondString = "second".rtoArray(40);
thirdString = "third".rtoArray(30);

结果是firstString将使用&#34; first&#34;字符串值,secondString将有40次与&#34; second&#34;字符串值,而thirdString将使用&#34;第三个&#34;字符串值。 (结果在数组中)。

答案 3 :(得分:0)

我不知道为什么你所做的事情是切实可行的,但也许这会有所帮助:

function arrayOfSameStrings(repeatString, times){
  var r = [];
  for(var i=0,l=times; i<l; i++){
    r.push(repeatString);
  }
  return r;
}
var ary = arrayOfSameStrings('Bad Idea', 30);
console.log(ary);

答案 4 :(得分:0)

这是我发现用相同字符串填充数组(大小为 10)的最酷方法:

const array = new Array(10).fill('my-string-value');

因此我们可以使用它:

const array = [
  ...new Array(10).fill('first'),
  ...new Array(5).fill('second'),
  ...new Array(20).fill('third'),
];

如果你想做通用的,你可以做这样的事情:

const data = [
  { value: 'first', count: 10 }, 
  { value: 'second', count: 5 }, 
  { value: 'third', count: 20 },
];

const myArray = data.map(({ value, count }) => 
  new Array(count).fill(value)).flat();