var _rawTostring = Object .prototype.toString;
var _hasOwnerProperty = Object .prototype.hasOwnProperty;
function type (target) {
return _rawTostring.call(target).replace(/\[object (.+)?\]/ ,'$1' );
}
function hasOwnerProperty (obj, key) {
return _hasOwnerProperty.call(obj, key);
}
function iterator (data, options) {
options = options || {};
if (type(data) === 'Object' ) {
for (var key in data) {
if (hasOwnerProperty(data, key)) {
var valType = type(data[key]);
if (valType === 'Object' || valType === 'Array' ) {
iterator(data[key], {
fn: options.fn,
context: options.context,
addition: options.addition,
key: key,
type: valType
});
} else {
options.fn && options.fn.call(options.context, data[key], {
key: key,
rawKey: options.key,
addition: options.addition,
rawType: options.type
});
}
}
}
} else if (type(data) === 'Array' ){
for (var index = 0 ; index < data.length; index++) {
var valType = type(data[index]);
if (valType === 'Object' || valType === 'Array' ) {
iterator(data[index], {
fn: options.fn,
context: options.context,
addition: options.addition,
type: valType
});
} else {
options.fn && options.fn.call(options.context, data[index], {
key: index,
rawKey: options.key,
addition: options.addition,
rawType: options.type
});
}
}
}
}
module.exports = iterator;
var iterator = require ('./' );
var data = {
"contributors" : [{
"name" : "test@qq.com"
}],
"description" : "test " ,
"files" : [
"LICENSE" ,
"README.md" ,
"index.js" ,
"test.js"
],
"keywords" : [
"test"
],
"license" : "MIT" ,
"maintainers" : [{
"name" : "theanarkh" ,
"email" : "test@qq.com"
}],
"name" : "test" ,
"readme" : "test in javascript" ,
"repository" : {
"type" : "git" ,
"url" : "test url"
},
"scripts" : {},
"version" : "0.0.1"
};
iterator(data, {
fn : (val, options) => {
console .log(val)
}
});