foop
Version:
interfaces that describe their intentions.
53 lines (49 loc) • 4.88 kB
JavaScript
/**
* @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=