UNPKG

foop

Version:

interfaces that describe their intentions.

54 lines (48 loc) 3.87 kB
var preAllocate = require('./preAllocate') /** * @name spliceIn * @since 5.0.0 beta.6 * @memberOf array * * @param {Array} array array to splice * @param {number} idx index to splice at * @param {*} val value to replace at index * @param {boolean} [canEdit=false] should mutate * @return {Array} * * {@link https://github.com/facebook/immutable-js/blob/master/src/Map.js#L930 immutable-js-splice-in} * @see {@link immutable-js-splice-in} * @see array/insertAtIndex * * @example * * spliceIn(['zero', 'one'], 1, 'wan') * //=> ['zero', 'wan'] * * spliceIn(['zero', 'one'], 0, 'wan') * //=> ['wan', 'one'] * * spliceIn(['zero', 'one'], 0, 'wan', true) * //=> ['wan', 'one'] * */ module.exports = function spliceIn(array, idx, val, canEdit) { var newLen = array.length + 1 if (canEdit && idx + 1 === newLen) { array[idx] = val return array } var newArray = preAllocate(newLen) var after = 0 for (var ii = 0; ii < newLen; ii++) { if (ii === idx) { newArray[ii] = val after = -1 } else { newArray[ii] = array[ii + after] } } return newArray } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaWNlSW4uanMiLCJzb3VyY2VzIjpbInNwbGljZUluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHByZUFsbG9jYXRlID0gcmVxdWlyZSgnLi9wcmVBbGxvY2F0ZScpXG5cbi8qKlxuICogQG5hbWUgc3BsaWNlSW5cbiAqIEBzaW5jZSA1LjAuMCBiZXRhLjZcbiAqIEBtZW1iZXJPZiBhcnJheVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IGFycmF5IHRvIHNwbGljZVxuICogQHBhcmFtIHtudW1iZXJ9IGlkeCBpbmRleCB0byBzcGxpY2UgYXRcbiAqIEBwYXJhbSB7Kn0gdmFsIHZhbHVlIHRvIHJlcGxhY2UgYXQgaW5kZXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbkVkaXQ9ZmFsc2VdIHNob3VsZCBtdXRhdGVcbiAqIEByZXR1cm4ge0FycmF5fVxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaW1tdXRhYmxlLWpzL2Jsb2IvbWFzdGVyL3NyYy9NYXAuanMjTDkzMCBpbW11dGFibGUtanMtc3BsaWNlLWlufVxuICogQHNlZSB7QGxpbmsgaW1tdXRhYmxlLWpzLXNwbGljZS1pbn1cbiAqIEBzZWUgYXJyYXkvaW5zZXJ0QXRJbmRleFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgc3BsaWNlSW4oWyd6ZXJvJywgJ29uZSddLCAxLCAnd2FuJylcbiAqICAgIC8vPT4gWyd6ZXJvJywgJ3dhbiddXG4gKlxuICogICAgc3BsaWNlSW4oWyd6ZXJvJywgJ29uZSddLCAwLCAnd2FuJylcbiAqICAgIC8vPT4gWyd3YW4nLCAnb25lJ11cbiAqXG4gKiAgICBzcGxpY2VJbihbJ3plcm8nLCAnb25lJ10sIDAsICd3YW4nLCB0cnVlKVxuICogICAgLy89PiBbJ3dhbicsICdvbmUnXVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcGxpY2VJbihhcnJheSwgaWR4LCB2YWwsIGNhbkVkaXQpIHtcbiAgY29uc3QgbmV3TGVuID0gYXJyYXkubGVuZ3RoICsgMVxuXG4gIGlmIChjYW5FZGl0ICYmIGlkeCArIDEgPT09IG5ld0xlbikge1xuICAgIGFycmF5W2lkeF0gPSB2YWxcbiAgICByZXR1cm4gYXJyYXlcbiAgfVxuXG4gIGNvbnN0IG5ld0FycmF5ID0gcHJlQWxsb2NhdGUobmV3TGVuKVxuICBsZXQgYWZ0ZXIgPSAwXG5cbiAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IG5ld0xlbjsgaWkrKykge1xuICAgIGlmIChpaSA9PT0gaWR4KSB7XG4gICAgICBuZXdBcnJheVtpaV0gPSB2YWxcbiAgICAgIGFmdGVyID0gLTFcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBuZXdBcnJheVtpaV0gPSBhcnJheVtpaSArIGFmdGVyXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBcnJheVxufVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCNUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7RUFDM0RBLEdBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDOztFQUUvQixJQUFJLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRztJQUNoQixPQUFPLEtBQUs7R0FDYjs7RUFFREEsR0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0VBQ3BDQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUM7O0VBRWIsS0FBS0EsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNsQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7TUFDZCxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRztNQUNsQixLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ1g7U0FDSTtNQUNILFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztLQUNqQztHQUNGOztFQUVELE9BQU8sUUFBUTtDQUNoQjsifQ==