说我有一个数组:
NotificationListenerService
我可以像这样添加字符串:
android:enabled="@boolean/isLessThan18"
我想要做的是拥有一个这个字符串的数组。所以,例如,我希望newArray有50个'thisString'。
我可以通过循环轻松完成此操作:
<service>
但是说如果我有3个字符串:
AccessibilityService
我想推动第三次30次,第二次40次和第三次50次,是通过上面的循环这样做的唯一方法吗?或者我可以说
var newArray = [];
我想这样做,因为在我的项目中我可以拥有超过10个字符串。我知道这是为什么构建循环,但我想知道是否有更简单的方法来做到这一点。
可以使用JQuery。
答案 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();