2011-02-04 5 views
-1

У меня есть массивмассива Javascript Перестановка

var s=[{"1":"one"},{"2":"two"},{"3":"three"},{"ALL":"ALL"}]; 

яваскрипта Здесь я хочу, чтобы проверить состояние, если BMW присутствует в array.I хочет переместить этот «BMW» в нулевое положение и существующие Нулевое значение переместилось (ist position) для ALL.

Пожалуйста, дайте несколько советов и ответов о том, как справиться с этим сценарием,

Заранее спасибо. не

Chaitu

+0

код вы вывесили недействителен. Не могли бы вы разместить свой фактический код? EDIT: Вопрос обновлен с исправленным кодом. – user113716

+0

Почему вы помещаете этот объект в массив? И действительно ли эти значения действительны? Я думаю, следующее следующее: 'var s = {1: 'one', 2: 'two', ALL: 'ALL'}' – anroesti

+0

Вам действительно нужно обменивать произвольные элементы или пытаться сортировать массив? Если вы сортируете, есть более простой способ. –

ответ

2

В вашем последнем пересмотре вопроса, вы больше не используете Array. Как таковой нет фактической позиции. Есть только свойства и ценности в гарантированном порядке.


Ваша предыдущая версия выглядела следующим образом:

var s=[{"1":"one"},{"2":"two"},{"3":"three"},{"ALL":"ALL"}]; 

и может быть выполнено следующим образом:

for(var i = 0,len = s.length; i < len; i++) { 
    if("ALL" in s[i]) { 
     s.unshift(s[i]); 
     s.splice(i+1,1); 
    } 
} 
+0

Можно ли обойти все элементы без обхода. – user569125

+0

Вы можете сделать '.sort()', как в ответе [@ BGerrissen] (http://stackoverflow.com/questions/4903256/javascript-array-swapping/4903424#4903424). Я не уверен, повлияет ли это на другие элементы массива. – user113716

0

Попробуйте это:

var s=[{"1":"one"},{"2":"two"},{"3":"three"},{"ALL":"ALL"}] 
for (var i = 0; i < s.length; i++) 
{ 
    if (typeof s[i]['ALL'] != 'undefined' && s[i]['ALL'] != null && s[i]['ALL'] == 'ALL') 
    { 
     s.unshift(s.splice(i, 1)); 
    } 
} 
+0

Можно ли обойти все элементы без обхода. – user569125

+0

Вам нужно положение элемента «ALL», чтобы соединить его. Если вы используете if (typeof s ['ALL'] ['ALL']! = 'Undefined' && s ['ALL'] ['ALL']!= null && s ['ALL'] ['ALL'] == 'ALL'), тогда вам понадобится другая итерация массива, чтобы удалить этот элемент из своей позиции и перенести его в начало массива (нет способа сделать некоторый массив .unique() в js и jQuery.unique() работает только с массивами элементов DOM). – CoolEsh

0

Используйте Array.sort () с функцией.

var s=[{"1":"one"},{"2":"two"},{"3":"three"},{"ALL":"ALL"}]; 
s = s.sort(function(a,b){ 
    return (b.ALL == "ALL") ? 1 : 0; 
}); 

возвращаемое значение:
- Менее 0: Сортировка «а», чтобы быть нижний индекс, чем «б»
- ноль: «а» и «б» следует считать равными, и нет сортировки выполнено.
- Больше 0: Сортировка «b» будет более низким индексом, чем «a».

ADDENDUM

Так как вы изменили свой вопрос ...

var s = { 1 : 'one', 2: 'two', ALL: 'ALL' }; // which is NOT an array but a literal object, BIG difference. 

if (s.ALL == "ALL") { 
    s[ 0 ] = "ALL"; 
    delete s.ALL; 
} 
Смежные вопросы