Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

119 рядки
2.2 KiB

  1. //eslint-disable-next-line no-extend-native
  2. Object.defineProperty(Array.prototype, 'spliceWhere', {
  3. enumerable: false,
  4. value: function (callback, thisArg) {
  5. let T = thisArg;
  6. let O = Object(this);
  7. let len = O.length >>> 0;
  8. let k = 0;
  9. while (k < len) {
  10. let kValue;
  11. if (k in O) {
  12. kValue = O[k];
  13. if (callback.call(T, kValue, k, O)) {
  14. O.splice(k, 1);
  15. k--;
  16. }
  17. }
  18. k++;
  19. }
  20. }
  21. });
  22. //eslint-disable-next-line no-extend-native
  23. Object.defineProperty(Array.prototype, 'spliceFirstWhere', {
  24. enumerable: false,
  25. value: function (callback, thisArg) {
  26. let T = thisArg;
  27. let O = Object(this);
  28. let len = O.length >>> 0;
  29. let k = 0;
  30. while (k < len) {
  31. let kValue;
  32. if (k in O) {
  33. kValue = O[k];
  34. if (callback.call(T, kValue, k, O)) {
  35. O.splice(k, 1);
  36. return kValue;
  37. }
  38. }
  39. k++;
  40. }
  41. }
  42. });
  43. //eslint-disable-next-line no-extend-native
  44. Object.defineProperty(Object.prototype, 'has', {
  45. enumerable: false,
  46. value: function (prop) {
  47. //eslint-disable-next-line no-undefined
  48. return (this.hasOwnProperty(prop) && this[prop] !== undefined && this[prop] !== null);
  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. if (!path.push)
  75. path = path.split('.');
  76. let o = obj;
  77. let pLen = path.length;
  78. for (let i = 0; i < pLen; i++) {
  79. o = o[path[i]];
  80. if (!o)
  81. return null;
  82. }
  83. return o;
  84. },
  85. getGuid: function () {
  86. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  87. let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
  88. return v.toString(16);
  89. });
  90. },
  91. //Only use this method for official logging. Temporary logs should use console.log
  92. // so those instances can be reported by eslint
  93. log: function (msg) {
  94. //eslint-disable-next-line no-console
  95. console.log(msg);
  96. }
  97. };