Javascript 如何在一个敲除可观察数组中发布一个复杂的JSON对象?

Javascript 如何在一个敲除可观察数组中发布一个复杂的JSON对象?,javascript,jquery,ajax,arrays,knockout.js,Javascript,Jquery,Ajax,Arrays,Knockout.js,我不太明白如何解决我目前的处境。我有一个表示“组织”的复杂javascript对象。在页面中,通过ajax get请求加载这些组织的列表,并将其推送到一个可观察的数组中,如下所示: $.getJSON(apiBaseUrl + "?userId=" + userId, function (data) { $.each(data, function () { var dropdownOrg = new DropdownOrg(); var org = new

我不太明白如何解决我目前的处境。我有一个表示“组织”的复杂javascript对象。在页面中,通过ajax get请求加载这些组织的列表,并将其推送到一个可观察的数组中,如下所示:

$.getJSON(apiBaseUrl + "?userId=" + userId, function (data) {
    $.each(data, function () {
        var dropdownOrg = new DropdownOrg();
        var org = new Organization();
        $.each(this, function (k, v) {
            if (k === "UserGuid") {
                org.userGuid = v;
            }
            if (k === "OrgId") {
                dropdownOrg.orgId = v;
                org.orgId = v;
            }
            if (k === "OrgName") {
                dropdownOrg.name = v;
                org.orgName = v;
            }
            if (k === "IsHiring") {
                org.isHiring = v;
            }
            if (k === "Blurb") {
                org.blurb = v;
            }
            if (k === "HqLocCity") {
                org.hqLocCity = v;
            }
            if (k === "HqLocCountry") {
                org.hqLocCountry = v;
            }
            if (k === "NumberOfEmployees") {
                org.numberOfEmployees = v;
                self.selectedEmployee(v);
            }
            if (k === "OrgImg") {
                org.orgImg = v;
            }
            if (k === "Ownership") {
                org.ownership = v;
                self.selectedOwnership(v);
            }
            if (k === "Website") {
                org.website = v;
            }
        });
        self.orgDdl.push(dropdownOrg);
        self.orgs.push(org);
    });
});
self.orgdll是一个可观察的数组,它只保存足够的数据,因此我可以切换我在页面上查看的组织(可见性切换)。self.orgs是一个ko可观察数组,它保存了我需要通过ajax PUT保存的所有数据。组织对象如下所示(注意,它是丑陋的):

告诉过你,很难看,但我真的不知道如何让它更干净,而且它很好,现在已经足够好了。在当前情况下,我有3个组织被加载到orgs observable数组中。在每个organizations视图中,我将放置一个按钮(尚未完成,需要先弄清楚这一点),该按钮将获取当前可见的组织并发布它

我有一个PUT请求的shell,但我不确定如何从数组中获取当前查看的组织

 self.updateOrganization = function () {
    $.ajax({
        type: "PUT",
        contentType: "application/json; charset=utf-8",
        url: apiBaseUrl + "?userId=" + userId,
        data: ko.toJSON(?????),
        dataType: "json",
        success: function (msg) {
            alert('success');
        },
        error: function (err) {
            alert('Error updating information, please try again!');
        }
    });
有什么想法吗?

明白了:

self.selectedOrgId.subscribe(function (currentOrgId) {
    //alert(currentOrgId);
    var org = ko.utils.arrayFirst(self.orgs(), function (item) {
        if (currentOrgId == item.orgId) {
            return item;
        }
    });
    alert(ko.toJSON(org));
}, self);
因此,我可以订阅我的selectedOrgId,每当我更改下拉列表项时,它都会更新。然后我可以获取该id,使用ko.util.arrayFirst函数在我的可观察数组中找到具有该id的项


归功于:

您可以在包含所有组织的数组中循环,找到与某个ID匹配的组织?然后在上面调用ko.toJSON()。嘿,我刚刚找到了这个:self.selectedOrg.subscribe(函数(newValue){alert(newValue);},self);我们应该做到这一点。如果我能让它工作,我会发布工作代码。你知道如何在这个对象上获取.indexOf()吗?我有orgId,需要从orgs数组中获取整个org对象。。
self.selectedOrgId.subscribe(function (currentOrgId) {
    //alert(currentOrgId);
    var org = ko.utils.arrayFirst(self.orgs(), function (item) {
        if (currentOrgId == item.orgId) {
            return item;
        }
    });
    alert(ko.toJSON(org));
}, self);