オブジェクトからレンダリングされるデータの表があります。具体的には、表の各行は配列の値です。オブジェクトを配列内で上下に移動
クリックしたボタンに応じて、配列内のオブジェクトを上下に移動できるようにする必要があります。
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>
これはlodash
か、手動アプローチの詳細ですのようなものを使って行うことができますか?私は、クリックしたアイテムのインデックスを取得してから、私に新しいインデックスを与えるために+1
または-1
を実行してみました。しかし、別のアイテムが既にそのインデックスに存在するので、その時点で何をすべきか分からなかった。
これを達成するにはどうすればよいですか? jQueryの手法、JavaScript、またはlodash
などのライブラリのみを探しているわけではありません。あなたが新しい位置に挿入し、その後移動したい項目を削除し、ためにまず、二回array.splice
を使用することができます
「to」の位置がどのように移動するのかわかりますか? 'from' '+/- 1'のインデックス? – SBB
renderExampleには、キー変数(各項目の配列インデックス)を持つ 'for'ループがあります。あなたはmoveItem(key、key - 1)を使って項目を上に移動し、moveItem(key、key + 1)を動かすことができます。あなたの配列の最初と最後の項目を特殊なケースに留意して、さらに上/下に移動できます。 – James