2015-05-11 5 views
3

Я пытаюсь изменить позицию индекса элемента в массиве, но я не могу понять способ.Как я могу изменить положение определенного элемента в массиве?

{ 
    "items": [ 
     1, 
     3, 
     2 
    ] 
} 
+1

Какой индекс, который вы хотите изменение??? – Manwal

+1

Каков ожидаемый результат? – Tushar

+0

Я хотел бы, чтобы массив был изменен на '' '" items ": [1, 2, 3]' '' –

ответ

6

Вы можете использовать splice для перемещения элемента в массиве:

var arr = [ 
     1, 
     3, 
     2 
    ]; 
var oldIndex = 2, 
    newIndex = 1; 


arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]); 

Это делает [1, 2, 3]

Внутренний стык удаляет и возвращает элемент, а внешний - вставляет его обратно.


Просто для удовольствия я определил общую функцию, способную перемещать кусок, а не просто элемент, и делает вычисление индекса:

Object.defineProperty(Array.prototype, "move", { 
    value:function(oldIndex, newIndex, nbElements){ 
     this.splice.apply(
      this, [newIndex-nbElements*(newIndex>oldIndex), 0].concat(this.splice(oldIndex, nbElements)) 
     ); 
    } 
}); 

var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9]; 
arr.move(5, 3, 4); 
console.log('1:', arr) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9]; 
arr.move(3, 9, 2); 
console.log('2:', arr); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

var arr = [0, 1, 2, 4, 5, 3, 6, 7]; 
arr.move(5, 3, 1); 
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7] 

var arr = [0, 3, 1, 2, 4, 5, 6, 7]; 
arr.move(1, 4, 1); 
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7] 

JS Bin

+0

Как это работает? Почему существует '' 'сращивание''' в' '' сращивание'''? –

+1

@ MichaelWilson2013 Я отредактировал для объяснения –

+1

Мне очень нравится общая функция! : P –

-1

Если вы хотите, чтобы отсортировать их в порядке Unicode (где цифры становятся строками), вы можете использовать функцию sort().

items.sort(); 

Если у вас есть заказ, вам необходимо предоставить функцию сортировки функции сортировки.

function compare(a, b) { 
    if (a is less than b by some ordering criterion) { 
    return -1; 
    } 
    if (a is greater than b by the ordering criterion) { 
    return 1; 
    } 
    // a must be equal to b 
    return 0; 
} 

и использовать его как это:

items.sort(compare(a, b)); 
+1

Я хотел был бы иметь возможность изменить индекс деталей, не сортировать их через их значение. –

+0

@ MichaelWilson2013 Я не уверен, что понял: вам нужно что-то вроде 'sort()', но это работает по индексу, а не по значению? – rpadovani

Смежные вопросы