ui
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
'use strict';
|
||||
|
||||
var _require = require('../helpers/is'),
|
||||
isArray = _require.isArray,
|
||||
isObject = _require.isObject;
|
||||
|
||||
module.exports = function flatten(depth) {
|
||||
var flattenDepth = depth || Infinity;
|
||||
|
||||
var fullyFlattened = false;
|
||||
var collection = [];
|
||||
|
||||
var flat = function flat(items) {
|
||||
collection = [];
|
||||
|
||||
if (isArray(items)) {
|
||||
items.forEach(function (item) {
|
||||
if (isArray(item)) {
|
||||
collection = collection.concat(item);
|
||||
} else if (isObject(item)) {
|
||||
Object.keys(item).forEach(function (property) {
|
||||
collection = collection.concat(item[property]);
|
||||
});
|
||||
} else {
|
||||
collection.push(item);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Object.keys(items).forEach(function (property) {
|
||||
if (isArray(items[property])) {
|
||||
collection = collection.concat(items[property]);
|
||||
} else if (isObject(items[property])) {
|
||||
Object.keys(items[property]).forEach(function (prop) {
|
||||
collection = collection.concat(items[property][prop]);
|
||||
});
|
||||
} else {
|
||||
collection.push(items[property]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fullyFlattened = collection.filter(function (item) {
|
||||
return isObject(item);
|
||||
});
|
||||
fullyFlattened = fullyFlattened.length === 0;
|
||||
|
||||
flattenDepth -= 1;
|
||||
};
|
||||
|
||||
flat(this.items);
|
||||
|
||||
while (!fullyFlattened && flattenDepth > 0) {
|
||||
flat(collection);
|
||||
}
|
||||
|
||||
return new this.constructor(collection);
|
||||
};
|
||||
Reference in New Issue
Block a user