Javascript遍历一组属性

Javascript iterating through a set of properties

本文关键字:一组 属性 遍历 Javascript      更新时间:2023-09-26

嗨,我已经创建了一个包含一组属性的函数对象。这是我的文件:

function LoginModelDTO(data) {
    var self = this;
    self.UserName = ko.observable(data.UserName).extend({
        minLength: {
            params: 25,
            message: "Username should have at least 25 chars"
        },
        required: {
            message: "Username is required"
        },
        maxLength: {
            params: 50,
            message: "Username should not have more then 50 chars"
        },
        trackChanges: null
    });
    self.Password = ko.observable(data.Password).extend({
        stringLength: {
            params: 25,
        },
        required: {
            message: "Password is required"
        },
        trackChanges: null
    });
    self.RememberMe = ko.observable(data.RememberMe).extend({
        trackChanges: null
    });
self.isValid = ko.computed(function () {
        var bool = self.FirstName.isValid() &&
            self.Username.isValid() &&
            self.Password.isValid() &&
            self.RememberMe() &&
        return bool;
    });
}

我想要的是能够找到一种方法来迭代每个属性,并询问它是否有效,而不必每次都写每个属性,因为我也必须写一个类似的结构,如self。

此外,我还需要创建其他与LoginModelDTO类似的对象,这些对象大约有30-35个属性。这将导致大量的代码和更大的javascript文件。

是否有任何方法可以迭代只抛出属性并检查它们是否有效?isValid应该被跳过

eis在评论中给了你一部分,mister在答案中给了你一部分,但这里是全部:

var allValidatablesAreValid = true;
for (var property in self)
{
    if (self.hasOwnProperty(property) && self[property]["isValid"]) {
        allValidatablesAreValid = allValidatablesAreValid && self[property].isValid();
    }
    // You can add an early bail out here:
    // if (!allValidatablesAreValid) { break; }
}

WELL for…在语句可以帮助您:

var obj = {
pro1:"hello",
pro2:function(){
//code here
},
etc:function(){
}//...
}
for(var property in obj)
{
if(obj.hasOwnProperty(property))
{
console.log(property)//display the name of the property and of course the access
}
}

要访问该属性的值,可以这样做:

for(var property in obj)
{
if(obj.hasOwnProperty(property))
{
console.log(obj[property])//display the value of the property(in case that you need it)
}
}

由于这个问题与淘汰验证库有关,我认为我应该展示如何使用库本身来完成此操作。

self.isValid = ko.computed(function () {
    return ko.validatedObservable(self).isValid()
});

查看以上链接获取更多信息