gpt4 book ai didi

javascript - JavaScript 中 JSON 时间值的排列

转载 作者:行者123 更新时间:2023-11-28 04:50:30 27 4
gpt4 key购买 nike

假设我有一个这样的 JSON 文件:

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

我如何找到 时间总和 之间存在的项目组合的所有可能值,例如 00:03:04 到 00:25:55 没有找到存在的每一个排列组合并将它们添加到该集合中?例如,第 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; }

关于javascript - JavaScript 中 JSON 时间值的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42968179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com