You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1020 B
50 lines
1020 B
1 month ago
|
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Array random slice with items count.
|
||
|
* @param {Array} arr
|
||
|
* @param {Number} num, number of sub items.
|
||
|
* @return {Array}
|
||
|
*/
|
||
|
exports.randomSlice = function randomSlice(arr, num) {
|
||
|
if (!num || num >= arr.length) {
|
||
|
return arr.slice();
|
||
|
}
|
||
|
var index = Math.floor(Math.random() * arr.length);
|
||
|
var a = [];
|
||
|
for (var i = 0, j = index; i < num; i++) {
|
||
|
a.push(arr[j++]);
|
||
|
if (j === arr.length) {
|
||
|
j = 0;
|
||
|
}
|
||
|
}
|
||
|
return a;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Remove one exists element from an array
|
||
|
* @param {Array} arr
|
||
|
* @param {Number} index - remove element index
|
||
|
* @return {Array} the array instance
|
||
|
*/
|
||
|
exports.spliceOne = function spliceOne(arr, index) {
|
||
|
if (index < 0) {
|
||
|
index = arr.length + index;
|
||
|
// still negative, not found element
|
||
|
if (index < 0) {
|
||
|
return arr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// don't touch
|
||
|
if (index >= arr.length) {
|
||
|
return arr;
|
||
|
}
|
||
|
|
||
|
for (var i = index, k = i + 1, n = arr.length; k < n; i += 1, k += 1) {
|
||
|
arr[i] = arr[k];
|
||
|
}
|
||
|
arr.pop();
|
||
|
return arr;
|
||
|
};
|