2017-07-27 41 views
3

我有JSON對象的陣列,例如,people用數據,例如:如何替換在JSON陣列的某些關鍵的所有值對象

[ 
    { 
    name : 'John', 
    age : '7' 
    }, 
    { 
    name : 'Mary', 
    age : '70' 
    }, 
    { 
    name : 'Joe', 
    age : '40' 
    }, 
    { 
    name : 'Jenny', 
    age : '4' 
    } 
] 

我想替換所有字符串值在age爲其相應的整數,以便按age排序。或者添加一個密鑰,例如ageI與整數值。

我可以遍歷數組,但是,有沒有更好的方法來做到這一點,例如在jQuery中使用一個命令?

+1

簡短的回答:沒有,因爲一切都將涉及一個「循環」的種類。它可能是一個隱藏在高階函數/構造之後的「循環」,例如使用Array.forEach或Array.map或相當的jQuery形式。 – user2864740

回答

2

您可以使用forEach修改的地方array

var array = [ 
 
    { 
 
    name : 'John', 
 
    age : '7' 
 
    }, 
 
    { 
 
    name : 'Mary', 
 
    age : '70' 
 
    }, 
 
    { 
 
    name : 'Joe', 
 
    age : '40' 
 
    }, 
 
    { 
 
    name : 'Jenny', 
 
    age : '4' 
 
    } 
 
] 
 

 

 
array.forEach(obj => { obj.age = Number(obj.age) }); 
 

 
console.log(array);

或者使用map作出新的數組:

var array = [ 
 
     { 
 
     name : 'John', 
 
     age : '7' 
 
     }, 
 
     { 
 
     name : 'Mary', 
 
     age : '70' 
 
     }, 
 
     { 
 
     name : 'Joe', 
 
     age : '40' 
 
     }, 
 
     { 
 
     name : 'Jenny', 
 
     age : '4' 
 
     } 
 
    ] 
 
    
 
console.log(
 
    array.map(obj => ({ name: obj.name, age: Number(obj.age) })) 
 
);

+0

「map」解決方案不太理想,因爲「 d必須重構整個對象。 – Purag

+0

@Purag我想這取決於用例。有時候它有其優點,因爲它不會修改原始對象。 – Psidom

+0

絕對;如果對象不比OP顯示的更復雜,那麼'map'是完全可行的!如果對象較大,'forEach'可以寫得更合理。 :) – Purag

2

如果你只是想如果你想留整數值有回調

arr.sort((a,b) => parseInt(a.age, 10) - parseInt(b.age, 10)); 

進行排序,簡單排序,使用一個簡單的循環

arr.forEach(e => e.age = parseInt(e.age, 10));