2013-10-04 3 views
0

У меня есть массив следующим образомCleanup в обманывает массив, который содержит массивы

var myArray={}; 
myArray.students = []; 
myArray.Professors = []; 
var tmpArray1 = []; 
var tmpArray2 = []; 

for(var key =0; key<data.length; key++){ 
    tmpArray1.push(name: data.studentName,id : data.studentId); 
    tmpArray2.push({name : data.profName,id :data.profId}); 
    myArray.students.push({name: data.studentName,id : data.studentId}); 
    myArray.Professors.push({name : data.profName,id :data.profId); 
} 

Этот массив содержит простофили для студентов, так и преподавателей. Я пытаюсь очистить его, проверив его с помощью временного массива и нажав только тех студентов и преподавателей, которые имеют уникальный идентификатор студента и профи, но он, похоже, работает некорректно. Я хочу туАггау иметь уникальные студентов и преподавателей

+1

Я использую underscorejs для подобных вещей, посмотрите, будет ли http://underscorejs.org/#uniq делать то, что вам нужно. – asawyer

+0

Я вижу четыре нажатия и отсутствие проверки в вашем примере. – j08691

+0

Все примеры, которые я видел, используют одномерные массивы, поэтому проверка выполняется с использованием $ .inArray. Как я могу сделать то же самое, но проверить, что studentId и studentName одинаковы? – Mary

ответ

0

Если предположить, что studentId и profId уникальны (вместо пары имя и идентификатор), вы могли бы использовать что-то вроде

var myArray = { 
     students: [], 
     professors: [] 
    }, 
    tmpArray1 = [], 
    tmpArray2 = []; 

for(var key=0; key<data.length; key++){ 
    if(tmpArray1.indexOf(data.studentId) === -1) { 
     tmpArray1.push(data.studentId); 
     myArray.students.push({name: data.studentName, id: data.studentId}); 
    } 
    if(tmpArray2.indexOf(data.profId) === -1) { 
     tmpArray1.push(data.profId); 
     myArray.professors.push({name: data.profName, id: data.profId); 
    } 
} 
0

Если вы хотите сделать в вашем массиве, сделайте так:

$(document).ready(function(){ 
    var data = [ 
     { "profId" : 1, "studentId" : 1, "profName" : "John", "studentName" : "Jack"}, 
     { "profId" : 2, "studentId" : 1, "profName" : "Steve", "studentName" : "Mark"}, 
     { "profId" : 3, "studentId" : 3, "profName" : "Gabe", "studentName" : "Martin"}, 
     { "profId" : 2, "studentId" : 1, "profName" : "Steve", "studentName" : "Mark"} 
    ]; 
    var Professors = []; 
    var Students = []; 

    for(var i = 0; i < data.length; i++){ 
     if(jQuery.inArray(data[i].profName, Professors) == -1){ 
      Professors.push(data[i].profName); 
     } 
     if(jQuery.inArray(data[i].studentName, Students) == -1){ 
      Students.push(data[i].studentName); 
     }  
    } 

    console.log("Professors:"); 
    for(var x = 0; x < Professors.length; x++){ 
     console.log(" " + Professors[x]); 
    } 
    console.log("Students:"); 
    for(var z = 0; z < Students.length; z++){ 
     console.log(" " + Students[z]); 
    } 
}); 
+0

Спасибо Hugo Tostes. Тем не менее, я хочу обернуть профессора и учеников в обертку, а затем использовать оболочку myArray. – Mary

0

Я бы просто использовал объект, так как объекты имеют уникальные ключи.

var myObj={}; 
myObj.students = {}; 
myObj.professors = {}; 

for(var key =0; key<data.length; key++){ 

    myObj.students[data[key].studentId] = data[key].studentName; 
    myObj.professors[data[key].profId] = data[key].profName; 

} 

console.log(myObj) 
Смежные вопросы