Object.entries = Object.entries || function (obj) { var ownProps = Object.keys(obj), i = ownProps.length, resArray = new Array(i); // preallocate the Array while (i--) resArray[i] = [ownProps[i], obj[ownProps[i]]]; return resArray; }; Object.fromEntries = Object.fromEntries || function (arr) { let obj = {}; arr.forEach(([k, v]) => obj[k] = v) return obj; } if (!Array.prototype.flat) { Object.defineProperty(Array.prototype, 'flat', { value: function (depth) { let res = [], depthArg = depth || 1, depthNum = 0, flatMap = (arr) => { arr.map((element, index, array) => { if (Object.prototype.toString.call(element).slice(8, -1) === 'Array') { if (depthNum < depthArg) { depthNum++; flatMap(element); } else { res.push(element); } } else { res.push(element); if (index === array.length - 1) depthNum = 0; } }); }; flatMap(this); return res; } }); }