Javascript 如何在ember js中交换数组元素?
我是ember js的新手,我正在尝试使用ember js交换元素,但它不起作用。下面是我的代码Javascript 如何在ember js中交换数组元素?,javascript,arrays,sorting,ember.js,Javascript,Arrays,Sorting,Ember.js,我是ember js的新手,我正在尝试使用ember js交换元素,但它不起作用。下面是我的代码 function swap(arr) { let tmp = arr[evt.oldIndex]; arr[evt.newIndex] = arr[evt.newIndex]; arr[evt.oldIndex] = tmp; } 我已经研究了余烬数组,但似乎找不到好的交换逻辑。没有替代品等。当我尝试四处闯荡时,看起来很混乱。我在谷歌上搜索过,但没有找到任何答案。有一个由Embe
function swap(arr) {
let tmp = arr[evt.oldIndex];
arr[evt.newIndex] = arr[evt.newIndex];
arr[evt.oldIndex] = tmp;
}
我已经研究了余烬数组,但似乎找不到好的交换逻辑。没有替代品等。当我尝试四处闯荡时,看起来很混乱。我在谷歌上搜索过,但没有找到任何答案。有一个由Ember Array实现的替换方法,其规范定义如下: 假设您有一个包含4个项的数组,并且您希望在索引0和3处交换2个项,您可以执行与当前代码类似的操作,但是使用replace,您可以执行以下操作:
const myArray = Ember.A([1, 2, 3, 4]);
const first = myArray[0];
const last = myArray[3];
myArray.replace(0, 1, last).replace(3, 1, first);
// mutates myArray and returns [4, 2, 3, 1]
然后,如果愿意,您可以使用它在自己的mixin中定义自己的swap方法。差不多
swapItems(arrayToSwap, firstIndex, lastIndex) {
const firstItem = arrayToSwap[firstIndex];
const lastItem = arrayToSwap[lastIndex];
arrayToSwap.replace(0, 1, lastItem).replace(3, 1, firstItem);
return arrayToSwap;
}
此方法适用于交换。能否添加输出示例?如果可能,我建议向数组的元素添加属性,然后根据该属性进行排序。然后就是将属性设置为所需的值。@locks我想我可以试试,但当前元素只是tagsinput对象。在不添加对数组排序的键的情况下,是否无法轻松地交换这两个元素?kp叹息输出是相同的数组,没有任何内容被交换。Use可以通过babel使用es6,比如[arr[evt.newIndex],arr[evt.oldIndex]=[arr[evt.oldIndex],arr[evt.newIndex]];这对我来说仍然不起作用,但是,由于某种原因,替换让我这么想。我发布的答案是,我尝试了这两种方法,获胜者是:这不应该是
const lastItem=arrayToSwap[secondIndex]代码>?回答得很好,但这不起作用,因为insertAt
添加了一个新元素,而不是替换它。如果你有[A,B,C]
并且想交换(A,C)
,你将得到[C,A,B,A]
。要使其正常工作,您需要在这两种情况下都使用replace
。
let temp = items.objectAt(evt.oldIndex);
items.replace(evt.oldIndex, 1, [items.objectAt(evt.newIndex)]);
items.insertAt(evt.newIndex, temp);