如何在ember js中交换数组元素?

时间:2016-02-02 11:11:12

标签: 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;
}

我已经研究过ember数组了,我似乎找不到好的交换逻辑。当我试图破解时,似乎没有替换等等。我用Google搜索但未能找到任何答案。

2 个答案:

答案 0 :(得分:3)

有一个由Ember Array实现的替换方法,其规范在此定义:http://emberjs.com/api/classes/Ember.NativeArray.html#method_replace

所以说你有一个包含4个项目的数组,并且你想在索引0和3处交换2个项目,你可以做类似于你现在的代码,但是使用replace,你可能会这样做: / p>

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中定义自己的交换方法。像

这样的东西
swapItems(arrayToSwap, firstIndex, lastIndex) {
  const firstItem = arrayToSwap[firstIndex];
  const lastItem = arrayToSwap[lastIndex];

  arrayToSwap.replace(0, 1, lastItem).replace(3, 1, firstItem);
  return arrayToSwap;
}

答案 1 :(得分:0)

    let temp = items.objectAt(evt.oldIndex);
    items.replace(evt.oldIndex, 1, [items.objectAt(evt.newIndex)]);
    items.insertAt(evt.newIndex, temp);

此方法适用于交换。