简体   繁体   中英

How to push 2 items to an array

In this fiddle line 27 shows

var doctors = [
    new Doctor("Doc A","A1"), 
    new Doctor("Doc B","A1"), 
    new Doctor("Doc C","A3")
];

Here, Doc A , Doc B and Doc C are hard-coded. They are also Knockout bindings:

ko.applyBindings(
    new Patient("idValue", "nameValue", "addressValue", "Female", "usernameValue",
                "passwordValue", "emailValue", "mobileValue", "imgFileValue", 
                "imgSrcValue", "imagePathValue", "useridValue", "A3")
);

Whatever is passed a1 , a2 or a3 selects the respective doc. For example, I am passing a3 in the bindings, so I get Doc C selected.

Given this JSON:

{
  "doctors": [
    {
      "id": 8,
      "schedules": [
        {
          "id": 8,
          "totime": "11:17",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "10:17",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "d1",
      "degree": "DA(Anaesthesia)",
      "email": "1@2.com",
      "imagePath": "",
      "department": "Bio-Chemistry",
      "name": "d1",
      "userid": 51,
      "gender": "Male",
      "mobile": "1234567900"
    },
    {
      "id": 10,
      "schedules": [
        {
          "id": 10,
          "totime": "12:35",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "11:35",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "d3",
      "degree": "BDS",
      "email": "d3@d3.com",
      "imagePath": "",
      "department": "Bio-Chemistry",
      "name": "d3",
      "userid": 56,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 1,
      "schedules": [
        {
          "id": 1,
          "totime": "12:55",
          "dayId": 1,
          "location": "Somajiguda",
          "fromtime": "11:55",
          "hospitalId": 5,
          "day": "Monday",
          "hospital": "Yashoda"
        }
      ],
      "username": "doctor",
      "degree": "BDS",
      "email": "",
      "imagePath": null,
      "department": "Critical Care",
      "name": "doctor",
      "userid": 4,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 7,
      "schedules": [
        {
          "id": 7,
          "totime": "11:17",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "11:17",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "donald",
      "degree": "DA(Anaesthesia)",
      "email": "donald@doctor.com",
      "imagePath": "",
      "department": "Bio-Chemistry",
      "name": "donald",
      "userid": 47,
      "gender": "Male",
      "mobile": "1234567989"
    },
    {
      "id": 6,
      "schedules": [
        {
          "id": 6,
          "totime": "11:15",
          "dayId": 1,
          "location": "Somajiguda",
          "fromtime": "11:15",
          "hospitalId": 5,
          "day": "Monday",
          "hospital": "Yashoda"
        }
      ],
      "username": "john",
      "degree": "BDS",
      "email": "john@john.com",
      "imagePath": null,
      "department": "Anesthesiology",
      "name": "john",
      "userid": 46,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 5,
      "schedules": [
        {
          "id": 5,
          "totime": "13:11",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "12:11",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "sknayak",
      "degree": "BDS",
      "email": "sknayak@sknayak.com",
      "imagePath": "",
      "department": "Anesthesiology",
      "name": "sknayak",
      "userid": 38,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 2,
      "schedules": [
        {
          "id": 2,
          "totime": "16:26",
          "dayId": 6,
          "location": "Somajiguda",
          "fromtime": "15:26",
          "hospitalId": 5,
          "day": "Saturday",
          "hospital": "Yashoda"
        }
      ],
      "username": "drsukant",
      "degree": "BDS",
      "email": "",
      "imagePath": null,
      "department": "Anesthesiology",
      "name": "sukant",
      "userid": 9,
      "gender": "Male",
      "mobile": "1234567890"
    }
  ]
}

Obtained with a GET request:

$.ajax({
    type: "GET", 
    url: projectUrl+"getDoctors",  
    dataType:"json",
    jsonp: true,
    async:false ,
    success: function (data) {
        $.each(data.doctors, function(index, currPat) {
           console.log(currPat.username);
       });    
    }
});

I want username and ID from the JSON in place of 'Doc A', 'a1' , 'Doc B', 'a2' , etc... as a replacement for var doctors = ... .

In my AJAX success, I tried:

success: function (data) {
    $.each(data.doctors, function(index, currPat) {
        new Doctors(currPat.id,currPat.username);
    });    
}

May be something like this?

var doctors = [];

$.ajax({
type: "GET", 
url: projectUrl+"getDoctors",  
dataType:"json",
jsonp: true,
async:false ,
success: function (data) {
    $.each(data.doctors, function(index, currPat) {
       doctors.push[currPat.id,currPat.username];
   });    
}
});

Your end result should be like this:

doctors = [[id1,name1],[id2,name2], ...... [id10,name10]]

Or you can also use the format like this:

doctors.push({id:currPat.id,name:currPat.username});

Then your end result should be something like this:

doctors = [{id:id1,name:name1},{id:id2,name:name2},......,{id:id10,name:name10}]

*I personally prefer format 2

EDIT Use of JQuery, .map()

var doctors;

$.ajax({
type: "GET", 
url: projectUrl+"getDoctors",  
dataType:"json",
jsonp: true,
async:false ,
success: function (data) {
    doctors = $.map(function () {
    return [data.id,data.username];}).get();    
}
});

A slightly more short hand than the above mention.

It looks like jQuery.map() can do what you need...

success: function (data) {
    doctors = $.map(data.doctors, function(doctor) {
        new Doctor(doctor.id, doctor.username);
    });    
}

JSFiddle

consider your Doctor function looks like:

// Doctor constructor with name and username properties
var Doctor = function(nameParam, usernameParam){
    this.name = nameParam;
    this.username = usernameParam;
};

then on AJAX success function populate all received doctors like:

$.each(jsonStr.doctors, function(index, currPat) {
     var doc = new Doctor(currPat.name,currPat.username);
     doctors.push(doc);
 });
alert(JSON.stringify(doctors));

working fiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM