|
|
- '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).forEach(function (prop) {
- collection = collection.concat(items[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);
- };
|