UNPKG

foop

Version:

interfaces that describe their intentions.

53 lines (49 loc) 4.88 kB
/** * @desc put a value at any index in an array * @since ? was in insert-at-index dep... * @memberOf array * * @see http://stackoverflow.com/questions/7032550/javascript-insert-an-array-inside-another-array * @see http://stackoverflow.com/questions/1348178/a-better-way-to-splice-an-array-into-an-array-in-javascript/41465578#41465578 * @see http://stackoverflow.com/questions/38060705/replace-element-at-specific-position-in-an-array-without-mutating-it * * @param {Array} arr array to put value in at index * @param {number} index index to put valu eat * @param {*} val value to put at index * @return {Array<any>} array with new value at index * * @example * * insertAtIndex(['zero-1', 'one-2'], 1, 1) //=> ['zero-1', 1, 'one-two'] * */ module.exports = function insertAtIndex(arr, index, val) { if (index < arr.length) { return [...arr.slice(0, index), ...val, ...arr.slice(index + 1)] } else { return [...arr, ...Array(index - arr.length), ...val] } } // @TODO test // const insertAt = require('../') // // const list = [0, 1, 2, 3, 4] // const eh = ['canada', 'moose'] // // const inserted = insertAt(list, 2, eh) // const expected = [0, 1, 'canada', 'moose', 3, 4] // // expected.forEach((expect, i) => { // console.assert(expect === inserted[i], 'same at the same index') // }) // console.log('all assertions passed :-)') /// another way of writing it, this one does not use spread // // function insertArrAt(array, index, arrayToInsert) { // // Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert)) // // return array.slice.apply([index, 0].concat(arrayToInsert)) // return array.slice(index, 0).apply([index, 0].concat(arrayToInsert)) // return array // } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0QXRJbmRleC5qcyIsInNvdXJjZXMiOlsiaW5zZXJ0QXRJbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjIHB1dCBhIHZhbHVlIGF0IGFueSBpbmRleCBpbiBhbiBhcnJheVxuICogQHNpbmNlID8gd2FzIGluIGluc2VydC1hdC1pbmRleCBkZXAuLi5cbiAqIEBtZW1iZXJPZiBhcnJheVxuICpcbiAqIEBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MDMyNTUwL2phdmFzY3JpcHQtaW5zZXJ0LWFuLWFycmF5LWluc2lkZS1hbm90aGVyLWFycmF5XG4gKiBAc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTM0ODE3OC9hLWJldHRlci13YXktdG8tc3BsaWNlLWFuLWFycmF5LWludG8tYW4tYXJyYXktaW4tamF2YXNjcmlwdC80MTQ2NTU3OCM0MTQ2NTU3OFxuICogQHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM4MDYwNzA1L3JlcGxhY2UtZWxlbWVudC1hdC1zcGVjaWZpYy1wb3NpdGlvbi1pbi1hbi1hcnJheS13aXRob3V0LW11dGF0aW5nLWl0XG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGFyciBhcnJheSB0byBwdXQgdmFsdWUgaW4gYXQgaW5kZXhcbiAqIEBwYXJhbSAge251bWJlcn0gaW5kZXggaW5kZXggdG8gcHV0IHZhbHUgZWF0XG4gKiBAcGFyYW0gIHsqfSB2YWwgdmFsdWUgdG8gcHV0IGF0IGluZGV4XG4gKiBAcmV0dXJuIHtBcnJheTxhbnk+fSBhcnJheSB3aXRoIG5ldyB2YWx1ZSBhdCBpbmRleFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogIGluc2VydEF0SW5kZXgoWyd6ZXJvLTEnLCAnb25lLTInXSwgMSwgMSkgLy89PiBbJ3plcm8tMScsIDEsICdvbmUtdHdvJ11cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5zZXJ0QXRJbmRleChhcnIsIGluZGV4LCB2YWwpIHtcbiAgaWYgKGluZGV4IDwgYXJyLmxlbmd0aCkge1xuICAgIHJldHVybiBbLi4uYXJyLnNsaWNlKDAsIGluZGV4KSwgLi4udmFsLCAuLi5hcnIuc2xpY2UoaW5kZXggKyAxKV1cbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gWy4uLmFyciwgLi4uQXJyYXkoaW5kZXggLSBhcnIubGVuZ3RoKSwgLi4udmFsXVxuICB9XG59XG5cbi8vIEBUT0RPIHRlc3Rcbi8vIGNvbnN0IGluc2VydEF0ID0gcmVxdWlyZSgnLi4vJylcbi8vXG4vLyBjb25zdCBsaXN0ID0gWzAsIDEsIDIsIDMsIDRdXG4vLyBjb25zdCBlaCA9IFsnY2FuYWRhJywgJ21vb3NlJ11cbi8vXG4vLyBjb25zdCBpbnNlcnRlZCA9IGluc2VydEF0KGxpc3QsIDIsIGVoKVxuLy8gY29uc3QgZXhwZWN0ZWQgPSBbMCwgMSwgJ2NhbmFkYScsICdtb29zZScsIDMsIDRdXG4vL1xuLy8gZXhwZWN0ZWQuZm9yRWFjaCgoZXhwZWN0LCBpKSA9PiB7XG4vLyAgIGNvbnNvbGUuYXNzZXJ0KGV4cGVjdCA9PT0gaW5zZXJ0ZWRbaV0sICdzYW1lIGF0IHRoZSBzYW1lIGluZGV4Jylcbi8vIH0pXG4vLyBjb25zb2xlLmxvZygnYWxsIGFzc2VydGlvbnMgcGFzc2VkIDotKScpXG5cblxuLy8vIGFub3RoZXIgd2F5IG9mIHdyaXRpbmcgaXQsIHRoaXMgb25lIGRvZXMgbm90IHVzZSBzcHJlYWRcbi8vXG4vLyBmdW5jdGlvbiBpbnNlcnRBcnJBdChhcnJheSwgaW5kZXgsIGFycmF5VG9JbnNlcnQpIHtcbi8vICAgLy8gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheSwgW2luZGV4LCAwXS5jb25jYXQoYXJyYXlUb0luc2VydCkpXG4vLyAgIC8vIHJldHVybiBhcnJheS5zbGljZS5hcHBseShbaW5kZXgsIDBdLmNvbmNhdChhcnJheVRvSW5zZXJ0KSlcbi8vICAgcmV0dXJuIGFycmF5LnNsaWNlKGluZGV4LCAwKS5hcHBseShbaW5kZXgsIDBdLmNvbmNhdChhcnJheVRvSW5zZXJ0KSlcbi8vICAgcmV0dXJuIGFycmF5XG4vLyB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkEsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtFQUN2RCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDakU7T0FDSTtJQUNILE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0dBQ3REO0NBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=