Object.traverse() / Рекурсивный обход объекта
Обходит дерево (JavaScript Object) "рекурсивно" и вызывает функцию для каждого ключа узла
https://github.com/nervgh/object-traverse
/* object-traverse v0.1.0 [url]https://github.com/nervgh/object-traverse[/url] */ !function(a){"use strict";function b(a){return a instanceof Object}function c(a){return"number"==typeof a&&!h(a)}function d(a,c,d,e,f,h){var i=[[],0,g(a).sort(),a],j=[];do{var k=i.pop(),l=i.pop(),m=i.pop(),n=i.pop();for(j.push(k);l[0];){var o=l.shift(),p=k[o],q=n.concat(o),r=c.call(d,k,p,o,q,m);if(r!==!0){if(r===!1){i.length=0;break}if(!(m>=h)&&b(p)){if(-1!==j.indexOf(p)){if(f)continue;throw new Error("Circular reference")}if(!e){i.push(n,m,l,k),i.push(q,m+1,g(p).sort(),p);break}i.unshift(q,m+1,g(p).sort(),p)}}}}while(i[0])}function e(a,b,e,g,h,i){var j=b,k=e,l=1===g,m=!!h,n=c(i)?i:f;d(a,j,k,l,m,n)}var f=100,g=Object.keys,h=a.isNaN;Object.traverse=e}(window); var object = { foo: { bar: { number: 1, string: 'walker', array: [ undefined, NaN ], date: new Date() } } }; Object.traverse(object, function(node, value, key, path, depth) { console.log(path.join('.'), value); }); // foo Object {bar: Object} // foo.bar Object {number: 1, string: "walker", array: Array[2], date: Sat Nov 22 2014 14:05:45 GMT+0300 (Московское время (зима))} // foo.bar.array [undefined, NaN] // foo.bar.array.0 undefined // foo.bar.array.1 NaN // foo.bar.date Sat Nov 22 2014 14:05:45 GMT+0300 (Московское время (зима)) // foo.bar.number 1 // foo.bar.string walker |
Пример: преобразуем строки в числа на всех уровнях
/* object-traverse v0.1.0 [url]https://github.com/nervgh/object-traverse[/url] */ !function(a){"use strict";function b(a){return a instanceof Object}function c(a){return"number"==typeof a&&!h(a)}function d(a,c,d,e,f,h){var i=[[],0,g(a).sort(),a],j=[];do{var k=i.pop(),l=i.pop(),m=i.pop(),n=i.pop();for(j.push(k);l[0];){var o=l.shift(),p=k[o],q=n.concat(o),r=c.call(d,k,p,o,q,m);if(r!==!0){if(r===!1){i.length=0;break}if(!(m>=h)&&b(p)){if(-1!==j.indexOf(p)){if(f)continue;throw new Error("Circular reference")}if(!e){i.push(n,m,l,k),i.push(q,m+1,g(p).sort(),p);break}i.unshift(q,m+1,g(p).sort(),p)}}}}while(i[0])}function e(a,b,e,g,h,i){var j=b,k=e,l=1===g,m=!!h,n=c(i)?i:f;d(a,j,k,l,m,n)}var f=100,g=Object.keys,h=a.isNaN;Object.traverse=e}(window); // --------------------------- function copy(any) { return JSON.parse(JSON.stringify(any)); } function isString(any) { return typeof any === 'string'; } function isNumberLikeString(string) { return /^\d+(.\d+)?$/.test(string); } // --------------------------- var data = { delivery: ["7", "24", "35"], mode: "0", page: "1", price: ["0", "33800"] }; console.log('before', copy(data)); Object.traverse(data, function(node, value, key) { if (isString(value) && isNumberLikeString(value)) { node[key] = Number(value); } }); console.log('after', copy(data)); |
Object.toFormData()
Object.toFormData()
Конвертирует объект с файлами, списками файлов и блоб объектами в FormData (на основе Object.traverse) Пример использования // convert object to [FormData] var form = Object.toFormData({ foo: { bar: { number: 1, file: '[File]' } } }); // send this object var xhr = new XMLHttpRequest(); xhr.open('POST', '/'); xhr.onload = function() { alert(xhr.responseText); }; xhr.send(form); |
|
Цитата:
Цитата:
|
Цитата:
... ты будешь в NPM\bower заливать? |
Цитата:
http://bower.io/search/?q=object-traverse http://bower.io/search/?q=object-to-formdata Цитата:
|
nerv_, функцию продавать думаешь, коли обфусцировал?
|
|
Object.traverse() устарел. См. Recursive Iterator
|
Часовой пояс GMT +3, время: 20:22. |