array.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { isArray, isNil, each } from '@antv/util';
  2. function merge(dataArray) {
  3. var rst = [];
  4. for (var i = 0, len = dataArray.length; i < len; i++) {
  5. rst = rst.concat(dataArray[i]);
  6. }
  7. return rst;
  8. }
  9. function values(data, name) {
  10. var rst = [];
  11. var tmpMap = {};
  12. for (var i = 0, len = data.length; i < len; i++) {
  13. var obj = data[i];
  14. var value = obj[name];
  15. if (!isNil(value)) {
  16. if (!isArray(value)) {
  17. if (!tmpMap[value]) {
  18. rst.push(value);
  19. tmpMap[value] = true;
  20. }
  21. } else {
  22. each(value, function (val) {
  23. if (!tmpMap[val]) {
  24. rst.push(val);
  25. tmpMap[val] = true;
  26. }
  27. });
  28. }
  29. }
  30. }
  31. return rst;
  32. }
  33. function firstValue(data, name) {
  34. var rst = null;
  35. for (var i = 0, len = data.length; i < len; i++) {
  36. var obj = data[i];
  37. var value = obj[name];
  38. if (!isNil(value)) {
  39. if (isArray(value)) {
  40. rst = value[0];
  41. } else {
  42. rst = value;
  43. }
  44. break;
  45. }
  46. }
  47. return rst;
  48. }
  49. function groupToMap(data, fields) {
  50. if (!fields) {
  51. return {
  52. 0: data
  53. };
  54. }
  55. var callback = function callback(row) {
  56. var unique = '_';
  57. for (var i = 0, l = fields.length; i < l; i++) {
  58. unique += row[fields[i]] && row[fields[i]].toString();
  59. }
  60. return unique;
  61. };
  62. var groups = {};
  63. for (var i = 0, len = data.length; i < len; i++) {
  64. var row = data[i];
  65. var key = callback(row);
  66. if (groups[key]) {
  67. groups[key].push(row);
  68. } else {
  69. groups[key] = [row];
  70. }
  71. }
  72. return groups;
  73. }
  74. function group(data, fields) {
  75. var appendConditions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  76. if (!fields) {
  77. return [data];
  78. }
  79. var groups = groupToMap(data, fields);
  80. var array = [];
  81. if (fields.length === 1 && appendConditions[fields[0]]) {
  82. var _values = appendConditions[fields[0]];
  83. each(_values, function (value) {
  84. value = '_' + value;
  85. array.push(groups[value]);
  86. });
  87. } else {
  88. for (var i in groups) {
  89. array.push(groups[i]);
  90. }
  91. }
  92. return array;
  93. }
  94. function remove(arr, obj) {
  95. if (!arr) {
  96. return;
  97. }
  98. var index = arr.indexOf(obj);
  99. if (index !== -1) {
  100. arr.splice(index, 1);
  101. }
  102. }
  103. function getRange(values) {
  104. if (!values.length) {
  105. return {
  106. min: 0,
  107. max: 0
  108. };
  109. }
  110. var max = Math.max.apply(null, values);
  111. var min = Math.min.apply(null, values);
  112. return {
  113. min,
  114. max
  115. };
  116. }
  117. export { merge, values, firstValue, group, groupToMap, remove, getRange };