best practice looping through javascript object
本问题已经有最佳答案,请猛点这里访问。
我有以下JS对象,我需要将parsefloat应用于任何数值字段(以便ngtable正确排序)。
我很难通过这个物体来完成这个任务。我试过嵌套angular.foreach,但有范围问题(内部循环看不到外部变量)。
最好的方法是什么?
编辑:应该提到对象名(即:人、个人详细信息)是动态的。:
我的目的是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | { "data": [ { "Person": { "id" :"1", "age":"23", "days":"5", "first_name":"Joe", "last_name":"Smith", }, "PersonDetails": { "id":"4", "name":"Cousin", "oldest:"2", } }, { "Person": { "id" :"2", "age":"18", "days":"3", "first_name":"John", "last_name":"Doe", }, "PersonDetails": { "id":"4", "name":"Second Cousing", "oldest:"3", } } ... ... ] }; |
你可以做这样的测试
1 2 3 4 5 6 7 8 9 10 11 | function representsNumber(str) { return str === (+str).toString(); } // e.g. usage representsNumber('a'); // false representsNumber([]); // false representsNumber(1); // false (it IS a number) representsNumber('1.5'); // true representsNumber('-5.1'); // true representsNumber('NaN'); // true |
并在所有节点上重复出现,overkill示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function seeker(o, test, _true, _false) { _true || (_true = function (e) {return e;}); _false || (_false = function (e) {return e;}); function recursor(o) { var k; if (o instanceof Array) for (k = 0; k < o.length; ++k) // iterate over array if (typeof o[k] !== 'object') o[k] = test(o[k]) ? _true(o[k]) : _false(o[k]); else recursor(o[k]); else for (k in o) // iterate over object if (typeof o[k] !== 'object') o[k] = test(o[k]) ? _true(o[k]) : _false(o[k]); else recursor(o[k]); } if (typeof o ==="object") return recursor(o), o; else return test(o) ? _true(o) : _false(o); // not an object, just transform } // e.g. usage seeker({foo: [{bar:"20"}]}, representsNumber, parseFloat); // {foo: [{bar: 20}]} |