【问题标题】:Compare a variable with object and return element according to the value difference将变量与对象进行比较,并根据值差异返回元素
【发布时间】:2018-08-27 14:42:21
【问题描述】:

由于我的 JS 不太好,我会在这里感谢帮助...

我有这个数组:

segments = [
    { state: 33, color: "red" },
    { state: 66, color:"yellow" },
    { state: 100, color: "green" }
]

三个变量:

goal = 100
currentValue = 26
percentage = currentValue * 100 / goal

我正在尝试编写一个函数来比较对象中的百分比和状态,并返回伴随状态的颜色。例如:

如果百分比

如果百分比在 33 和 66 之间,则必须返回“黄色”。

如果百分比 > 66 或 > 目标,则必须返回“绿色”。

到目前为止我有这个,但它不起作用:

defineChartColor = (currentActivity, goal) => segments.find(segments => segments.state > percentage).color

【问题讨论】:

    标签: javascript ecmascript-6 ecmascript-5


    【解决方案1】:

    您需要检查state,而不是<= 对象的value。等号对于查找精确值很重要,例如 100 的最后一个。

    var segments = [{ state: 33, color: "red" }, { state: 66, color:"yellow" }, { state: 100, color: "green" }],
        goal = 100,
        currentValue = 26,
        percentage = currentValue * 100 / goal,
        getColor = (percentage, goal) => segments.find(({ state }) => percentage === goal
            ? state === 100
            : percentage <= state 
        ).color;
    
    console.log(getColor(33, 100));
    console.log(getColor(66, 100));
    console.log(getColor(100, 100));
    console.log(getColor(20, 20));

    【讨论】:

    • 如果段没有排序会发生什么?
    • 感谢您的回答@nina-scholz。但是当百分比>目标时,它仍然需要返回绿色。
    • @Emeeus,它需要一个排序数组,就像 op 包含的那样。
    • @emeeus,好问题。我意识到该函数应该将排序段作为第一个操作。
    • @Aleval,请添加一些用例和想要的结果。对于未排序的数据,您可以提前排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多