Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ember js中交换数组元素?_Javascript_Arrays_Sorting_Ember.js - Fatal编程技术网

Javascript 如何在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

我是ember js的新手,我正在尝试使用ember js交换元素,但它不起作用。下面是我的代码

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);