Javascript 从对象的第n个索引中提取特定字段

Javascript 从对象的第n个索引中提取特定字段,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个页面,显示使用以下方法构建的文件模板列表 var loadCustomTemplate = function () { loadBaseTemplate(); var res = 0; for (i = 0; i < self.GetSeam().length; i++) { var a = self.count() + 1; self.count(a); res = self.GetSeam()[i].Fil

我有一个页面,显示使用以下方法构建的文件模板列表

var loadCustomTemplate = function () {
    loadBaseTemplate();
    var res = 0;
    for (i = 0; i < self.GetSeam().length; i++) {
        var a = self.count() + 1;
        self.count(a);
        res = self.GetSeam()[i].FileFormat.split("_");
        if (res.length == 4) {
            var ap = res[3].split('.');
            self.append(ap[0]);
        } else {
            self.append("");
        }
        var obj = {
            Code: ko.observable(self.code()),
            Number: ko.observable(self.number()),
            SeamReportPath: ko.observable(self.reportPath()),
            FileFormat: ko.observable(self.append()),
            SequenceNumber: ko.observable(a)
        }
        self.CustomTemplate.push(obj);            
    }
    self.count(0);
}; 
完成这些更新后,他们可以保存更新的CustomTemplate。这使用了对这个问题不重要的ajax。save方法调用一个验证方法,该方法应该检查以确保对象数组中没有重复的FileFormat字段。这就是我所拥有的,但它正在失败

var validateTemplates = function() {
    for (i = 0; i < self.CustomTemplate().length; i++) {
        var checkVal = self.CustomTemplate()[i].FileFormat;
        var checkSeq = self.CustomTemplate()[i].SequenceNumber;
        for (j = 0; j < self.CustomTemplate().length; j++) {
          if (checkSeq !== self.CustomTemplate()[j].SequenceNumber ){  
            if (checkVal+"" === self.CustomTemplate()[j].FileFormat) {
                if (checkSeq == self.CustomTemplate()[j].SequenceNumber ){
                    return false;
                }
            }                   
        }
    }
    return true;
};
var validateTemplates=function(){
对于(i=0;i
问题是,在检查self.CustomTemplate()[i].FileFormat和self.CustomTemplate()[i].SequenceNumber时,它没有反映页面上显示的数据或发送到控制器的数据(MVC 4)。如果我将其中任何一个放在警报中,它将显示一个函数。如何访问这些特定字段中的数据进行比较

提前谢谢

如果我把它们中的任何一个放在警报中,它将显示一个函数

那是因为你在做这种事情:

var checkVal = self.CustomTemplate()[i].FileFormat;
FileFormat
ko.observable(…)
的结果,它返回一个函数,因此
checkVal
实际上包含一个函数

解决方案适用于所有这些情况:

var checkVal = self.CustomTemplate()[i].FileFormat(); // Parentheses at the end!

括号执行observable函数,如果没有参数,则“获取”该observable的值(如果传入值,则将“设置”该值)

敲除观察值是函数。要设置它们的值,你可以用参数调用它们。要获取它们的值,你可以不用参数调用它们。例如:
var a=ko.observable(1);a(2);console.log(a());
打印
2
谢谢!仍然习惯敲除的输入和输出。
var checkVal = self.CustomTemplate()[i].FileFormat(); // Parentheses at the end!