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.
 
 
 

107 lines
1.5 KiB

  1. Array.prototype.firstIndex = function (callback, thisArg) {
  2. let T = thisArg;
  3. let O = Object(this);
  4. let len = O.length >>> 0;
  5. let k = 0;
  6. while (k < len) {
  7. let kValue;
  8. if (k in O) {
  9. kValue = O[k];
  10. if (callback.call(T, kValue, k, O))
  11. return k;
  12. }
  13. k++;
  14. }
  15. return -1;
  16. };
  17. Array.prototype.spliceWhere = function (callback, thisArg) {
  18. let T = thisArg;
  19. let O = Object(this);
  20. let len = O.length >>> 0;
  21. let k = 0;
  22. while (k < len) {
  23. let kValue;
  24. if (k in O) {
  25. kValue = O[k];
  26. if (callback.call(T, kValue, k, O)) {
  27. O.splice(k, 1);
  28. k--;
  29. }
  30. }
  31. k++;
  32. }
  33. };
  34. Array.prototype.spliceFirstWhere = function (callback, thisArg) {
  35. let T = thisArg;
  36. let O = Object(this);
  37. let len = O.length >>> 0;
  38. let k = 0;
  39. while (k < len) {
  40. let kValue;
  41. if (k in O) {
  42. kValue = O[k];
  43. if (callback.call(T, kValue, k, O)) {
  44. O.splice(k, 1);
  45. return kValue;
  46. }
  47. }
  48. k++;
  49. }
  50. };
  51. module.exports = {
  52. get2dArray: function (w, h, def) {
  53. def = def || 0;
  54. let result = [];
  55. for (let i = 0; i < w; i++) {
  56. let inner = [];
  57. for (let j = 0; j < h; j++) {
  58. if (def === 'array')
  59. inner.push([]);
  60. else
  61. inner.push(def);
  62. }
  63. result.push(inner);
  64. }
  65. return result;
  66. },
  67. randomKey: function (o) {
  68. let keys = Object.keys(o);
  69. let keyIndex = ~~(Math.random() * keys.length);
  70. let key = keys[keyIndex];
  71. return key;
  72. },
  73. getDeepProperty: function (obj, path) {
  74. let o = obj;
  75. let pLen = path.length;
  76. for (let i = 0; i < pLen; i++) {
  77. o = o[path[i]];
  78. if (!o)
  79. return null;
  80. }
  81. return o;
  82. }
  83. };