2017-07-27 74 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));