foop
Version:
interfaces that describe their intentions.
50 lines (44 loc) • 3.41 kB
JavaScript
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 {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}
*
* @example
*
* spliceIn(['zero', 'one'], 1)
* //=> ['zero']
*
* spliceIn(['zero', 'one'], 0)
* //=> ['one']
*
* spliceIn(['zero', 'one'], 0, true)
* //=> ['one']
*
*/
module.exports = function spliceOut(array, idx, canEdit) {
var newLen = array.length - 1
// @TODO why no `shift` ?
if (canEdit && idx === newLen) {
array.pop()
return array
}
var newArray = preAllocate(newLen)
var after = 0
for (var ii = 0; ii < newLen; ii++) {
if (ii === idx) {
after = 1
}
newArray[ii] = array[ii + after]
}
return newArray
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaWNlT3V0LmpzIiwic291cmNlcyI6WyJzcGxpY2VPdXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcHJlQWxsb2NhdGUgPSByZXF1aXJlKCcuL3ByZUFsbG9jYXRlJylcblxuLyoqXG4gKiBAbmFtZSBzcGxpY2VJblxuICogQHNpbmNlIDUuMC4wIGJldGEuNlxuICogQG1lbWJlck9mIGFycmF5XG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgYXJyYXkgdG8gc3BsaWNlXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4IGluZGV4IHRvIHNwbGljZSBhdFxuICogQHBhcmFtIHtib29sZWFufSBbY2FuRWRpdD1mYWxzZV0gc2hvdWxkIG11dGF0ZVxuICogQHJldHVybiB7QXJyYXl9XG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9pbW11dGFibGUtanMvYmxvYi9tYXN0ZXIvc3JjL01hcC5qcyNMOTMwIGltbXV0YWJsZS1qcy1zcGxpY2UtaW59XG4gKiBAc2VlIHtAbGluayBpbW11dGFibGUtanMtc3BsaWNlLWlufVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgc3BsaWNlSW4oWyd6ZXJvJywgJ29uZSddLCAxKVxuICogICAgLy89PiBbJ3plcm8nXVxuICpcbiAqICAgIHNwbGljZUluKFsnemVybycsICdvbmUnXSwgMClcbiAqICAgIC8vPT4gWydvbmUnXVxuICpcbiAqICAgIHNwbGljZUluKFsnemVybycsICdvbmUnXSwgMCwgdHJ1ZSlcbiAqICAgIC8vPT4gWydvbmUnXVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcGxpY2VPdXQoYXJyYXksIGlkeCwgY2FuRWRpdCkge1xuICBjb25zdCBuZXdMZW4gPSBhcnJheS5sZW5ndGggLSAxXG5cbiAgLy8gQFRPRE8gd2h5IG5vIGBzaGlmdGAgP1xuICBpZiAoY2FuRWRpdCAmJiBpZHggPT09IG5ld0xlbikge1xuICAgIGFycmF5LnBvcCgpXG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICBjb25zdCBuZXdBcnJheSA9IHByZUFsbG9jYXRlKG5ld0xlbilcblxuICBsZXQgYWZ0ZXIgPSAwXG4gIGZvciAobGV0IGlpID0gMDsgaWkgPCBuZXdMZW47IGlpKyspIHtcbiAgICBpZiAoaWkgPT09IGlkeCkge1xuICAgICAgYWZ0ZXIgPSAxXG4gICAgfVxuICAgIG5ld0FycmF5W2lpXSA9IGFycmF5W2lpICsgYWZ0ZXJdXG4gIH1cblxuICByZXR1cm4gbmV3QXJyYXlcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkI1QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO0VBQ3ZEQSxHQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQzs7O0VBRy9CLElBQUksT0FBTyxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7SUFDN0IsS0FBSyxDQUFDLEdBQUcsRUFBRTtJQUNYLE9BQU8sS0FBSztHQUNiOztFQUVEQSxHQUFLLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7O0VBRXBDQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUM7RUFDYixLQUFLQSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ2xDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtNQUNkLEtBQUssR0FBRyxDQUFDO0tBQ1Y7SUFDRCxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7R0FDakM7O0VBRUQsT0FBTyxRQUFRO0NBQ2hCOyJ9