2016-04-29 47 views
-1

我有一個JSON文件轉換爲JavaScript對象以及一個年份參數,我想只返回與它的名稱和內容相關的數組作爲JSON。如何切片JavaScript對象?

文件看起來是這樣的:

{ 
"2012":[ 

    { 
     "id": 1, 
     "firstName": "John", 
     "lastName": "Doe", 
     "GPA": 80 
    }  

], 
"2013":[ 

    { 
     "id": 1, 
     "firstName": "John", 
     "lastName": "Doe", 
     "GPA": 85 
    }, 
    { 
     "id": 2, 
     "firstName": "Anna", 
     "lastName": "Smith", 
     "GPA": 92 
    } 

] 
} 

我使用下面的函數找到數組,並與GPA < 90刪除所有recoreds:

getExcellenceByYear: function(year) { //get all students with GPA>=90 by year 

     fake=JSON.parse(JSON.stringify(file)); 
     keys = Object.keys(fake); 
     if(fake.hasOwnProperty(year)) 
     { 

    for(var j=fake[year].length-1; j>=0; j--) // delete all irrelevant records 
    { 
     if(fake[year][j].GPA<90) 
     { 
      delete fake[year][j]; 
      fake[year]=fake[year].filter(function(x) {return x!==null}); 
     } 
    } 


} 
else 
return JSON.stringify({}); 

return JSON.stringify(fake[year]);    
} 

,但我只回陣列中的記錄,當我需要它的名字時,例如:

{ 
2013: [ 
{ 
    id: 2, 
    firstName: "Anna", 
    lastName: "Smith", 
    GPA: 92 
} 
    ] 
} 

謝謝

+1

查找的JavaScript地圖功能。我認爲用你想要的而不是刪除的東西建立一個新的對象可能會更好。我看到了關於地圖功能的教程,這就是他們所做的。我不記得它足夠的細節,所以我不能舉一個例子。 – markbernard

+0

你如何確定相關性 –

回答

3

而不是修改您的源數據,只是提取通過謂詞的位。下面是使用Array.prototype.filter一個例子:

var data = { 
 
    "2012":[ 
 
     { 
 
      "id": 1, 
 
      "firstName": "John", 
 
      "lastName": "Doe", 
 
      "GPA": 80 
 
     }  
 

 
    ], 
 
    "2013":[ 
 
     { 
 
      "id": 1, 
 
      "firstName": "John", 
 
      "lastName": "Doe", 
 
      "GPA": 85 
 
     }, 
 
     { 
 
      "id": 2, 
 
      "firstName": "Anna", 
 
      "lastName": "Smith", 
 
      "GPA": 92 
 
     } 
 
    ] 
 
}; 
 

 
function getByYear(year, gpaThreshold) { 
 
    if (!data[year]) { 
 
    return null; 
 
    } 
 
    
 
    var obj = {}, 
 
     aboveGPAThreshold = data[year].filter(function(datum) { 
 
     return datum.GPA >= gpaThreshold; 
 
     }); 
 
    
 
    obj[year] = aboveGPAThreshold; 
 
    
 
    return obj; 
 
}; 
 

 
console.log(getByYear('2013', 90));

+1

不錯,這就是我即將發佈的內容。我想補充一點,如果OP可以控制JSON文件,他應該使其成爲一個數組年,而不是一個對象的屬性是幾年:它可以只過濾數組,而不必創建一個新對象並將其指定爲感興趣的年份。 – Aaron

+1

OP也希望按GPA進行過濾,因此按年份索引並不是一個壞主意。你真的可以通過過濾標準(GPA或年份)進行索引。 –

+1

當然,我的意思是,過濾一個[[{year:2013,students:[...]},{year:2014,students:[...]}},'array比當前對象。 – Aaron