gpt4 book ai didi

javascript - splice() 不更新 knockout.js 中数组的项目顺序

转载 作者:行者123 更新时间:2023-12-04 01:33:30 26 4
gpt4 key购买 nike

关注 prior post关于如何更新数组的顺序。我听从了 Michael Best 的建议,并使用 splice() 在按钮单击时修改了数组的顺序

self.moveup = function (itemIndex) {
var i = self.itemList.indexOf(itemIndex);
if(i >= 1){
var array = self.itemList();
self.itemList.splice(i-1, 2, array[i], array[i-1]);
}

我遇到问题的地方是递增数组中的项目。 From reading the usage of Array Splice第一个参数表示向上移动应该发生变化的位置我认为是 i+1 ,值 2 表示数组中有多少项会发生变化,所以那里没有变化,然后是范围 I thought 将是所选项目 array[i] 并且结束将是 [i+1] 因为我正在增加位置。

self.itemList.splice(i+1, 2, array[i], array[i+1]);

在附加的 fiddler 中,您可以看到值增加,但项目实际上并没有改变顺序,它们只是在您按下向下按钮时才复制。我希望结果与调用 moveUp 时的结果相同。

对于我在这里遗漏的任何指示,我将不胜感激。 http://jsfiddle.net/rlcrews/SCWmk/5/

-干杯

最佳答案

快到了。 Here's how I did it.

向上移动一个项目时,您需要将其与上一个项目交换。因此,您需要替换索引 i-1 处的元素。和 iarray[i]array[i-1] , 分别。你的moveup方法正是这样做的,所以一切都很好。

现在,当向下移动一个项目时,您需要将它与下一个 项目交换。因此,您替换索引处的元素 ii+1array[i+1]array[i] , 分别。但是,您的代码会更改元素 i+1i+2 ,这是不好的。相反,您应该这样做:

self.itemList.splice(i, 2, array[i+1], array[i]);

您在 i 处开始拼接(当您删除 ii+1 处的元素时)并将它们替换(在该索引处插入)为 array[i+1]array[i] .

另一方面,您对是否可以将项目向下移动的检查不正确。唯一不应该向下移动的项目是最后一个项目,即索引 self.itemList().length-1 处的元素。 .因此,检查应该看起来像 if (i < array.length - 1) { ... } (见 fiddle )。

关于javascript - splice() 不更新 knockout.js 中数组的项目顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17151354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com