Reputation: 2353
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):
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
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
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
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
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