首页 > 解决方案 > 从比较中列出清单

问题描述

在过去的几天里,我一直在研究 Javascript 以及如何通过比较来制作列表,我发现了一些关于数组的东西,虽然我知道这是我需要的,但我无法理解它是如何与我的关于 Javascript 的一些知识。

我想列一个清单,假设我们有 5 个项目(我们以 a、b、c、d、e 为例),并要求您将一个项目与另一个项目进行比较(您喜欢“a”还是“d”?)每次你选择一个项目时,它会得到一个分数,它会一直询问你,直到对每个项目进行所有比较,然后从这些比较中列出一个列表,得分最高的项目排名第一。

如果有一篇文章、一段视频、一段我可以分析的代码,任何事情都会有所帮助。提前致谢

标签: javascriptarrayscomparisonranking

解决方案


这是一个关于如何处理它的想法。

因此,您可以进行以下设置:

const items = ["a", "b", "c", "d", ...and so on]
const pointsRecord = {"a": 0, "b": 0, "c": 0, ...and so on}

有了这两个部分,您可以建立对进行比较,并跟踪每个项目的点。

从您的描述看来,您想将每个项目与列表中的每个其他项目进行比较。您可能必须遍历列表两次并构建一个可以输出或呈现在屏幕上的比较对。

您可以编写一个函数来构建比较对,如下所示:

const comparisonPairs = [
    [ "a", "b" ],
    [ "a", "c" ],
    [ "a", "d" ],
    [ "b", "c" ],
    ...and so on
]

有了这样的东西,你可以遍历比较对,在屏幕上渲染对或输出到终端。然后获取输入,并更新 pointsRecord 对象。就像是:

pointsRecord = {
   ...pointsRecord, // copy over all the data from the original point record
   [selectedItem]: pointsRecord[selectedItem] + 1 // increment the points of the selected item
}

更新 pointsRecord 后,您可以继续下一个对。

要在最后对它们进行排序,您只需对项目运行排序功能。就像是:

const sortedItems = items.slice().sort((a, b) => pointsRecord[b] - pointsRecord[a]);

添加 .slice() 会创建一个新数组,因此您通常不会更改原始数组,这是一种很好的做法,但您可能希望根据您的用例对原始数组进行适当的排序。

这只是一种方法。当然,您想考虑如何组织数据,听起来您已经在这样做,因此您走在正确的轨道上。当您正在处理此问题时,如果您发现它变得混乱、更新事物并跟踪数据,这可能是重新评估和重新思考是否有更好的方法来存储信息的好兆头。


推荐阅读