这是一个艰难的,至少我的最低技能.
基本上,用户将价格列表输入到阵列中,然后输入他想要购买的所需数量的项目,最后是不超过的最大成本.
我需要检查所需数量的项目的组合数量是否小于或等于给定的成本.
如果问题是组合中固定数量的项目,比如3,只需要三个循环选择每个价格并将它们添加到测试中就会容易得多.
我感到难过的地方是要求用户输入任意数量的项目,直到数组中的项目数量.
这是我最初决定的,然后才意识到用户可以指定任意数字的组合,而不仅仅是三个.它是在这里的类似主题的帮助下创建的,但同样只有当用户指定他想要每个组合3个项目时它才有效.否则它不起作用.
// test if any combinations of items can be made
for (one = 0; one < (count-2); one++) // count -2 to account for the two other variables
{
for (two = one + 1; two < (count-1); two++) // count -1 to account for the last variable
{
for (three = two + 1; three < count; three++)
{
total = itemCosts[one] + itemCosts[two] + itemCosts[three];
if (total <= funds)
{
// DEBUG …Run Code Online (Sandbox Code Playgroud) 我一直试图找出实现我已经有一段时间的想法的最佳方法。
目前,我有一个无线电扫描仪的 icecast mp3 流,其中“正在播放”元数据会根据扫描仪登陆的频道实时更新。当使用 VLC 等专用媒体播放器时,元数据与接收到的音频完美对齐,它的功能完全符合我的要求——本质上是一个远程无线电扫描仪。我想通过网页实现类似的东西,从表面上看,这似乎是一项简单的任务。
如果我只想流式传输音频,使用简单的<audio>标签就足够了。然而,HTML5 音频播放器没有嵌入的 in-stream 元数据的概念,icecast 与 mp3 音频数据一起编码。虽然我可以从 icecast 服务器状态 json 查询当前的“正在播放”元数据,但由于客户端和服务器端缓冲,以这种方式完成时,音频和元数据之间可能会有超过 20 秒的延迟。在某些情况下,当扫描仪每秒都在更改其“正在播放”元数据时,这完全不适合我的应用程序。
有一个非常有趣的 Node.JS 解决方案就是为了这个确切的目标而开发的 - 无线电扫描仪应用程序中的实时元数据:icecast-metadata-js。这表明确实可以处理来自单个 icecast 流的音频和元数据。现场演示特别令人印象深刻:https : //eshaz.github.io/icecast-metadata-js/
但是,我正在寻找一种可以完全在客户端运行而无需安装 Node.JS 的解决方案,而且看起来这应该是相对简单的。
今天搜索了一天的大部分时间,似乎在这个站点和其他地方有几个类似的问题,没有任何有凝聚力、精心设计的答案或建议。从我到目前为止能够收集到的信息来看,我相信我的解决方案是使用 Javascript 流功能(例如fetch)从 icecast 服务器中提取原始 mp3 和元数据,通过 Web Audio API 播放音频并处理元数据当他们到达时阻止。类似于下图:

我想知道是否有人有任何好的阅读和/或示例来通过 Web Audio API 播放 mp3 流。我在大多数 JS 方面仍然是一个相对新手,但我了解 API 的基本概念以及它如何处理音频数据。我正在努力实现的正确方法是实现 a) 实时处理来自 mp3 流的数据,以及 b) 检测嵌入在流中的元数据块并相应地处理它们。
如果这是一个冗长的问题,我深表歉意,但我想提供足够的背景故事来解释为什么我想以我所做的特定方式处理事情。
在此先感谢您的建议和帮助!