I have a table of data that is rendered from an object. Specifically, each row of the table is a value from the array.
I need to be able to move the object up or down in the array, depending on the button clicked.
var obj = [{
"RuleDetailID": "11624",
"AttributeValue": "172",
"Value": "Account Manager",
"IsValueRetired": "0"
}, {
"RuleDetailID": "11626",
"AttributeValue": "686",
"Value": "Agent",
"IsValueRetired": "0"
}, {
"RuleDetailID": "11625",
"AttributeValue": "180",
"Value": "Analyst",
"IsValueRetired": "0"
}, {
"RuleDetailID": "11629",
"AttributeValue": "807",
"Value": "Individual Contributor",
"IsValueRetired": "0"
}, {
"RuleDetailID": "11627",
"AttributeValue": "690",
"Value": "Senior Agent",
"IsValueRetired": "0"
}];
// Exmaple only, just rendering a table
function renderExample() {
var table = '';
for (var key in obj) {
table += "<tr><td>" + obj[key].Value + "</td><td><a href=\"#\" onClick=\"move('up', " + obj[key].RuleDetailID + ")\">Move Up</a></td><td></td><td><a href=\"#\" onClick=\"move('down', " + obj[key].RuleDetailID + ")\">Move Down</a></td></tr>";
}
return table;
}
// Move the object in the array up or down
function move(value, positionChange) {
// On run, move the object in the array up or down respectivly.
}
<table>
<tbody id="example">
<script>
document.write(renderExample())
</script>
</tbody>
</table>
Can this be done with something like lodash
or is it more of a manual approach? I tried by getting the index of the clicked item and then doing +1
or -1
accordingly to give me the new index. However, I wasn't sure what to do at that point since another item would already exist at that index.
How can I go about achieving this? Not looking for a jQuery approach, javascript or a library such as lodash
only.
To change the position of an element in an array:Use the splice() method to insert the element at the new index in the array. The splice method changes the original array by removing or replacing existing elements, or adding new elements at a specific index.
📚 The splice() method changes the contents of an array by removing or replacing existing elements and/or adding new elements in place. 📚 The unshift() method adds one or more elements to the beginning of an array and returns the new length of the array.
To replace an element in an array:Use the indexOf() method to get the index of the element you want to replace. Call the Array. splice() method to replace the element at the specific index. The array element will get replaced in place.
Array methods push, shift, unshift, pop, reverse, splice, sort, copyWithin, fill — simple examples.
You can use array.splice
twice, first to remove the item you want to move, and then to insert it into the new position
var data = [1,2,3,4,5];
function moveItem(from, to) {
// remove `from` item and store it
var f = data.splice(from, 1)[0];
// insert stored item into position `to`
data.splice(to, 0, f);
}
moveItem(0, 2);
console.log(data);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With