Javascript 如何在带有敲除的select中迭代项目以显示范围值

Javascript 如何在带有敲除的select中迭代项目以显示范围值,javascript,asp.net-mvc,knockout.js,Javascript,Asp.net Mvc,Knockout.js,是否有方法遍历选择列表中的项并计算值。例如,我有以下数据 “因素”:[ 20, 40, 60, 80, 100 ] 它当前显示在一个多选列表框中,我在HTML语句中计算级别 级别0:20 一级:40 二级:60 三级:80 四级:100 我想计算并显示一个起始值,如下所示; 0级:0-20 一级:21-40 二级:41-60 第3级:61-80 四级:81-100 当我显示当前关卡时,如何在淘汰赛中回到上一关卡。例如,在“选择”列表框中,我显示100,上一个级别为80,但当我显示100时,我希望

是否有方法遍历选择列表中的项并计算值。例如,我有以下数据

“因素”:[ 20, 40, 60, 80, 100 ]

它当前显示在一个多选列表框中,我在HTML语句中计算级别 级别0:20 一级:40 二级:60 三级:80 四级:100

我想计算并显示一个起始值,如下所示; 0级:0-20 一级:21-40 二级:41-60 第3级:61-80 四级:81-100

当我显示当前关卡时,如何在淘汰赛中回到上一关卡。例如,在“选择”列表框中,我显示100,上一个级别为80,但当我显示100时,我希望显示上一个级别+1和当前级别100, 四级:81-100

用户可以更改这些值,以便输入15、45、70、80、100的因子。然后我想根据这些数字显示一个范围值,例如0-15、16-45等

有没有办法在knockout/javascript/html中实现这一点

HTML:

使用MVC格式: 型号: 使用制度; 使用System.Collections.Generic; 使用System.Linq; 使用System.Web

 namespace AuditReview.Models
 {
 public class ProjectTrustSetting
   {
    public string ProjectId { get; set; }
    public int AdjustmentFactor { get; set; }
    public List<int> ListPoints { get; set; }
   }
 }
namespace AuditReview.Models
{
公共类项目信任设置
{
公共字符串ProjectId{get;set;}
公共整数调整因子{get;set;}
公共列表列表点{get;set;}
}
}
控制器数据示例:

  public JsonResult GetProjectTrustSettings()
    {
        //create list
        var trustSetting = new List<ProjectTrustSetting>
            {
                new ProjectTrustSetting
                    {
                        ProjectId = "30729",
                        AdjustmentFactor = 5,
                        ListPoints = new List<int>
                            { 20, 40, 60, 80, 100} 
                    }
            };

        return Json(trustSetting, JsonRequestBehavior.AllowGet);
    }
public JsonResult GetProjectTrustSettings()
{
//创建列表
var trustSetting=新列表
{
新项目信任设置
{
projectd=“30729”,
调整系数=5,
ListPoints=新列表
{ 20, 40, 60, 80, 100} 
}
};
返回Json(信任设置,JsonRequestBehavior.AllowGet);
}
正在寻找创建起始范围值的最佳方法,无论是在knockout、HTML还是JavaScript中。我在想,在我已有的函数中,应该有某种方法可以在HTML中实现这一点

optionsText:function(factor){return'Level'+factors().indexOf(factor)+':'+factor},或作为计算的可观察值或任何其他建议输入敲除


感谢您的帮助

您可以在viewmodel上创建一个函数来处理标签的生成。如果向绑定提供函数,它将作为第一个参数在当前上下文中传递,因此可以执行以下操作:

<select data-bind="options: levels, 
                   optionsText: label, 
                   selectedOptions: selectedLevels" multiple="true"></select>

self.label = function(level) {
    var index = self.levels().indexOf(level);
    if (index === 0) {
        return level.name() + " 0-" + level.level();
    } else {
        var floor = self.levels()[index -1].level() + 1;
        return level.name() + " " + floor + "-" + level.level();
    }
};

self.label=功能(级别){
var index=self.levels().indexOf(level);
如果(索引==0){
返回level.name()+“0-”+level.level();
}否则{
var floor=self.levels()[index-1].level()+1;
返回level.name()+“”+floor+“-”+level.level();
}
};

这里显示了如何工作。

您可以在viewmodel上创建一个函数来处理标签的生成。如果向绑定提供函数,它将作为第一个参数在当前上下文中传递,因此可以执行以下操作:

<select data-bind="options: levels, 
                   optionsText: label, 
                   selectedOptions: selectedLevels" multiple="true"></select>

self.label = function(level) {
    var index = self.levels().indexOf(level);
    if (index === 0) {
        return level.name() + " 0-" + level.level();
    } else {
        var floor = self.levels()[index -1].level() + 1;
        return level.name() + " " + floor + "-" + level.level();
    }
};

self.label=功能(级别){
var index=self.levels().indexOf(level);
如果(索引==0){
返回level.name()+“0-”+level.level();
}否则{
var floor=self.levels()[index-1].level()+1;
返回level.name()+“”+floor+“-”+level.level();
}
};
这里展示了这将如何工作

<select data-bind="options: levels, 
                   optionsText: label, 
                   selectedOptions: selectedLevels" multiple="true"></select>

self.label = function(level) {
    var index = self.levels().indexOf(level);
    if (index === 0) {
        return level.name() + " 0-" + level.level();
    } else {
        var floor = self.levels()[index -1].level() + 1;
        return level.name() + " " + floor + "-" + level.level();
    }
};