【问题标题】:Swapping elements in an array of objects [duplicate]交换对象数组中的元素[重复]
【发布时间】:2014-01-20 08:47:11
【问题描述】:

我有一个对象数组,我想交换数组中两个元素的位置。 我试过这个:

var tempObject = array.splice(index, 1, array[index + 1]);
array.splice(index+1, 1, tempObject);

但它似乎无法正常工作,因为它会导致一些奇怪的错误。例如,我无法使用对象的方法。调用array[x].getName 会导致错误。

任何人都可以在这里伸出援助之手吗?

为了以防万一,我已经使用object.prototype 来添加方法。

【问题讨论】:

    标签: javascript arrays object swap


    【解决方案1】:

    您的代码中的错误是 splice 返回一个项目数组,而不是单个项目。由于您要提取单个项目,因此您可以这样做:

    var tempObject = array.splice(index, 1, array[index + 1])[0]; // get the item from the array
    array.splice(index+1, 1, tempObject);
    

    This answer 提供了一个较短的版本,同样使用拼接:

    array[index] = array.splice(index+1, 1, array[index])[0];
    

    Another very interesting answer 既短又fast

    function identity(x){return x};
    
    array[index] = identity(array[index+1], array[index+1]=array[index]);
    

    【讨论】:

    【解决方案2】:

    JSFIDDLE

    var array_of_numbers = [5,4,3,2,1,0],
        swap = function(array,a,b){var tmp=array[a];array[a]=array[b];array[b]=tmp;};
    swap(array_of_numbers,0,4);
    // array_of_numbers now is [1,4,3,2,5,0]
    

    或者您可以将函数添加到Array.prototype:

    JSFIDDLE

    Array.prototype.swap = function(a,b){ var tmp=this[a];this[a]=this[b];this[b]=tmp;};
    var array_of_numbers = [5,4,3,2,1,0];
    array_of_numbers.swap(0,4);
    // array_of_numbers now is [1,4,3,2,5,0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2020-10-02
      • 2020-12-31
      • 2019-07-02
      • 2012-09-21
      • 2013-04-04
      • 2017-05-31
      相关资源
      最近更新 更多