UNPKG

kalman-filter

Version:

Kalman filter (and Extended Kalman Filter) Multi-dimensional implementation in Javascript

47 lines (37 loc) 1.31 kB
const uniq = require('./uniq.js'); const limit = 100; /** *Equivalent to the Object.assign method, takes several arguments and creates a new object corresponding to the assignment of the arguments * @param {Object} args * @param {Number} step * @returns {Object} */ const deepAssign = function (args, step) { if (step > limit) { throw (new Error(`In deepAssign, number of recursive call (${step}) reached limit (${limit}), deepAssign is not working on self-referencing objects`)); } const filterArguments = args.filter(arg => (arg) !== undefined && arg !== null); const lastArgument = filterArguments[filterArguments.length - 1]; if (filterArguments.length === 1) { return filterArguments[0]; } if (typeof (lastArgument) !== 'object' || Array.isArray(lastArgument)) { return lastArgument; } if (filterArguments.length === 0) { return null; } const objectsArguments = filterArguments.filter(arg => typeof (arg) === 'object'); let keys = []; for (const arg of objectsArguments) { keys = keys.concat(Object.keys(arg)); } const uniqKeys = uniq(keys); const result = {}; for (const key of uniqKeys) { const values = objectsArguments.map(arg => arg[key]); result[key] = deepAssign(values, step + 1); } return result; }; module.exports = ((...args) => deepAssign(args, 0));