PierBJX
PierBJX

Reputation: 2353

Split an array in three part according to a provided index

I would like to split an array of n elements in 3 parts according to a provided index (in the picture below the index is 3):

enter image description here

I tried this, but in some cases it does not work.

const split = (array, index) => {
  const requestedItem = array[index];
  const rightItems = array.slice(index + 1);
  const leftItems = array.slice(0, index);

  return {
    requestedItem,
    leftItems,
    rightItems
  };
}

console.log(split(['item1', 'item2', 'item3', 'item4'], 1));
console.log(split(['item1'], 0));

Upvotes: 0

Views: 197

Answers (4)

Snirka
Snirka

Reputation: 598

This is how I would do it:

const splitArray = (arr, index) => {
    return [
        arr.slice(0, index), 
        [arr[index]], 
        arr.slice(index + 1)
    ];
}

const array1 = ['item1', 'item2', 'item3', 'item4'];
const array2 = ['item1'];

console.log(splitArray(array1, 1));
console.log(splitArray(array2, 0));
console.log(splitArray(array1, 3));

Upvotes: 2

knpfl
knpfl

Reputation: 91

const array = ['item1', 'item2', 'item3', 'item4'];
const index = 2;

leftItems = array.slice(0, index);
requestedItem = array[index];
rightItems = array.slice(index+1, array.length);

Upvotes: 1

Gabriele Petrioli
Gabriele Petrioli

Reputation: 195982

You could use 3 slices

function splitOnIndex(array, index) {
  const leftItems = array.slice(0, index);
  const requestedItem = array.slice(index, index + 1);
  const rightItems = array.slice(index + 1);

  return [leftItems, requestedItem, rightItems];
}

var [left, requested, right] = splitOnIndex(['item1', 'item2', 'item3', 'item4'], 1);
console.log(left, requested, right);

[left, requested, right] = splitOnIndex(['item1'], 0);
console.log(left, requested, right);

[left, requested, right] = splitOnIndex(['item1', 'item2', 'item3', 'item4'], 3);
console.log(left, requested, right);

Upvotes: 1

Nina Scholz
Nina Scholz

Reputation: 386560

You could just split with the given index.

function split(array, index) {
     return [
         array.slice(0, index),
         array.slice(index, index + 1),
         array.slice(index + 1)
     ];
}

console.log(split(['item1', 'item2', 'item3', 'item4'], 1));
/*
leftItems = ['item1'];
requestedItem = ['item2'];
rightItems = ['item3', 'item4'];
*/

console.log(split(['item1'], 0));
/*
leftItems = [];
requestedItem = ['item1'];
rightItems = [];
*/

console.log(split(['item1', 'item2', 'item3', 'item4'], 3));
/*
leftItems = ['item1', 'item2', 'item3'];
requestedItem = ['item4'];
rightItems = [];
*/

Upvotes: 3

Related Questions