bet*_*nas 2 javascript arrays split slice
我正在研究这个小应用程序,我有一个超过100个对象的数组,我想分组.棘手的部分是我希望我新创建的数组包含随机数量的对象.例如:
initial: ["a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","a11" ,"a12","a13","a14","a15","a16","a17","a18","a19"]
修改: ["a0","a1","a2"],["a3","a4","a5","a6","a7"],["a8"],["a9"," A10" ] ...
我想你应该已经明白了.最近几个小时我一直坚持这个,我无法理解.
我希望你能帮帮我!非常感谢
由于您没有为每个数组指定最小数组数或最小/最大元素,因此这里是一个通用函数,您可以为每个数组指定最小/最大元素.请注意,这并不严格执行min元素,实际上100%可能无法执行,具体取决于原始数组中有多少元素与每个数组元素随机分配的元素数量.例如,如果你有10个元素原始,你最小2最多4,你可能最终得到3/3/3/1,因为min将被强制执行,直到没有足够强制执行.你没有真正给出任何"规则".
min
并且max
都是可选的,默认为1.如果仅min
指定,max
则默认为min
.
另请注意,由于数组是通过引用传递的,因此默认情况下会"清空"原始数组.如果要保留原始数组,请取消注释函数中的第一行(如果选择原型,则显然为n/a).
function randChunkSplit(arr,min,max) {
// uncomment this line if you don't want the original array to be affected
// var arr = arr.slice();
var arrs = [],size=1;
var min=min||1;
var max=max||min||1;
while (arr.length > 0) {
size = Math.min(max,Math.floor((Math.random()*max)+min));
arrs.push(arr.splice(0, size));
}
return arrs;
}
Run Code Online (Sandbox Code Playgroud)
例子
var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
// randChunkSplit(letters)
[["a"], ["b"], ["c"], ["d"], ["e"], ["f"], ["g"], ["h"], ["i"], ["j"], ["k"], ["l"], ["m"], ["n"], ["o"], ["p"], ["q"], ["r"], ["s"], ["t"], ["u"], ["v"], ["w"], ["x"], ["y"], ["z"]]
// randChunkSplit(letters,3)
[["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"], ["j", "k", "l"], ["m", "n", "o"], ["p", "q", "r"], ["s", "t", "u"], ["v", "w", "x"], ["y", "z"]]
// randChunkSplit(letters,1,3)
[["a"], ["b", "c"], ["d", "e"], ["f", "g", "h"], ["i", "j", "k"], ["l"], ["m"], ["n", "o"], ["p", "q"], ["r"], ["s", "t"], ["u", "v", "w"], ["x", "y", "z"]]
// randChunkSplit(letters,2,3)
[["a", "b", "c"], ["d", "e", "f"], ["g", "h"], ["i", "j", "k"], ["l", "m", "n"], ["o", "p", "q"], ["r", "s", "t"], ["u", "v", "w"], ["x", "y", "z"]]
// randChunkSplit(letters,2,3)
// same thing as before, but notice how this time we end up with just 1 elem left over
[["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"], ["j", "k", "l"], ["m", "n", "o"], ["p", "q"], ["r", "s"], ["t", "u", "v"], ["w", "x", "y"], ["z"]]
Run Code Online (Sandbox Code Playgroud)
或者,您可以根据需要将其原型化为Array,如下所示:
Array.prototype.randChunkSplit = function (min,max) {
var arrs = [],size=1;
var min=min||1;
var max=max||min||1;
while (this.length > 0) {
size = Math.min(max,Math.floor((Math.random()*max)+min));
arrs.push(this.splice(0, size));
}
return arrs;
}
var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
letters.randChunkSplit(1,4)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2614 次 |
最近记录: |