@iicoding/utils
Version:
Browser 端 - 类型判断 - 类似 koa 的异步compose - sleep - 扩展对象属性 - 扩展 storage 对象功能
91 lines (89 loc) • 3.68 kB
JavaScript
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
import { arrayDiff } from "../array";
var getSum = function getSum(arr) {
return arr.reduce(function (prev, current) {
return prev + current;
}, 0);
};
export var cwlKill = function cwlKill() {};
export var cwlCalculationByScoreAndRemainder = function cwlCalculationByScoreAndRemainder(cwl) {
var maxLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
var maxNumber = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 33;
if (!Array.isArray(cwl)) {
throw 'cwl must be an number array';
}
var length = cwl.length;
if (length < maxLength) {
throw "cwl array length must be equal to ".concat(maxLength);
}
if (length > maxLength) {
cwl.splice(maxLength, length - 1);
}
var sum = getSum(cwl);
var result = {
sum: sum,
computed: [],
possible: []
};
for (var i = 0; i < length; i++) {
var _result$possible;
var current = cwl[i];
var subtractResult = sum - current;
// 得数
var obtaining = Math.floor(subtractResult / current);
// 余数
var remainder = subtractResult % current;
// 符合要求的集合
var value = [];
// 得数大于余数
if (obtaining > remainder) {
// 大于 maxNumber 向下取
if (obtaining > maxNumber) {
var flag = obtaining;
while (flag > 0) {
if (flag <= maxNumber) {
value.push(flag);
}
flag -= 10;
}
} else {
// 小于 maxNumber 向上取
var _flag = obtaining;
while (_flag <= maxNumber) {
value.push(_flag);
_flag += 10;
}
}
} else {
// 得数小于余数 向上取 临界条件为小于余数
var _flag2 = obtaining;
var flagSum = remainder + obtaining;
while (_flag2 <= flagSum) {
value.push(_flag2);
_flag2 += 10;
}
}
var possibleValue = value.sort(function (a, b) {
return a - b;
});
result.computed.push({
obtaining: obtaining,
remainder: remainder,
number: current,
value: possibleValue
});
(_result$possible = result.possible).push.apply(_result$possible, _toConsumableArray(possibleValue));
}
result.possible = Array.from(new Set(result.possible)).sort(function (a, b) {
return a - b;
});
return result;
};
export var diffCwl = function diffCwl(source, target) {
return arrayDiff(cwlCalculationByScoreAndRemainder(source).possible, target);
};