JSON 时间值在 JavaScript 中的排列

Permutations from JSON time value in JavaScript

假设我有一个 JSON 文件:

 {
"item1":{"time":"00:18:21"},
"item2":{"time":"00:22:22"},
"item3":{"time":"00:02:11"},
"item4":{"time":"01:34:32"}
}

我将如何找到项目组合的所有可能值 time sums 让我们说 00:03:04 to 00:25:55 没有找到存在的每个排列组合并为该集合添加它们? ex 项目 1 和项目 3 将在该时间限制中找到,其中它们的时间加在一起为 00:20:32。我曾尝试使用排列,但您 运行 遇到了更多对象的某些缺点。如果我增加到 7 个对象,显然我需要进行超过 13,000 次迭代来将时间值加在一起并检查范围限制。我可以做些什么来简化算法?

编辑:(你们需要一些背景信息)我正在尝试制作一个应用程序,对长度为 hh:mm:ss 格式的视频集合进行排序,并生成具有给定时间长度的播放列表。

您可以获得所有组合,并检查组合是否适合给定的区间。然后将其推入结果数组。

function getCombinations(object, min, max) {

    function getTotalTime(a) {
        return a.map(a => getTimeValue(object[a].time)).reduce((a, b) => a + b, 0);
    }

    function getTimeValue(t) {
        return t.split(':').reduce(function (a, b) { return a * 60 + +b; });
    }

    function getTimeString(v) {
        return [60, 60, 1].map(t => [v % t, v = Math.floor(v / t)][0]).map(a => ('00' + a).slice(-2)).reverse().join(':');
    }

    function fork(i, t) {
        var total = getTotalTime(t);
        if (i === array.length) {
            if (minValue <= total && total <= maxValue) {
                result.push({ keys: t, time: getTimeString(total) });
            }
            return;
        }

        fork(i + 1, t.concat(array[i]));
        fork(i + 1, t);
    }

    var result = [],
        minValue = getTimeValue(min),
        maxValue = getTimeValue(max),
        array = Object.keys(object);

    fork(0, []);
    return result;
}

var data = { item1: { time: "00:18:21" }, item2: { time: "00:22:22" }, item3: { time: "00:02:11" }, item4: { time: "01:34:32" } },
    result = getCombinations(data, '00:03:04', '00:25:55');

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }