JavaScript перемещает элемент массива на передний план
Я хочу проверить, содержит ли массив "role"
. Если это так, я хочу переместить "role"
в начало массива.
var data= ["email","role","type","name"]; if ("role" in data) data.remove(data.indexOf("role")); data.unshift("role") data;
Здесь я получил результат:
["role", "email", "role", "type", "name"]
- JavaScript null и плюс (+) operatior
- Идиоматически найти количество вхождений, которое заданное значение имеет в массиве
- Передача массива в качестве параметра в JavaScript
- .push () несколько объектов в массив JavaScript возвращает 'undefined'
- Почему я не могу поменять символы в строке javascript?
Как я могу это исправить?
- Самый эффективный способ создания нулевого заполненного массива JavaScript?
- Как я могу получить размеры многомерного массива Javascript?
- Возвращаемый индекс наибольшего значения в массиве
- Добавить свойство в массив javascript
- JavaScript «in» для элементов `undefined` в массивах
- Лучший способ удалить элемент массива по значению
- Как сортировать многомерный массив по нескольким столбцам в JavaScript?
- Перестановка перьев
Вы можете отсортировать массив и указать, что значение "role"
встречается перед всеми другими значениями и что все остальные значения равны:
var first = "role"; data.sort(function(x,y){ return x == first ? -1 : y == first ? 1 : 0; });
Моя первая мысль:
var data= ["email","role","type","name"]; // if it's not there, or is already the first element (of index 0) // then there's no point going further: if (data.indexOf('role') > 0) { // find the current index of 'role': var index = data.indexOf('role'); // using splice to remove elements from the array, starting at // the identified index, and affecting 1 element(s): data.splice(index,1); // putting the 'role' string back in the array: data.unshift('role'); } console.log(data);
Чтобы немного пересмотреть и привести в порядок:
if (data.indexOf('role') > 0) { data.splice(data.indexOf('role'), 1); data.unshift('role'); }
Рекомендации:
-
Array.indexOf()
. -
Array.prototype.splice()
. -
Array.unshift()
.
- Оператор
in
– это свойства, а не элементы в массивах. См. Как проверить, включает ли массив объект в JavaScript? Для чего использовать еще. - Вам не хватает фигурных скобок вокруг двух (!) Операторов в if-блоке
- Я не уверен, что
.remove()
функция.remove()
которую вы используете, принимает индекс элемента.
Самое чистое решение в ES6, на мой взгляд:
let data = ["email","role","type","name"]; data = data.filter(item => item !== "role"); data.unshift("role");
var i = -1; while (i < data.length) { if (data[i] === "role") { data.splice(i, 1); break; } i++; } data.unshift("role");
indexOf
имеет ограниченную поддержку браузера, не будучи распознанной IE7-8. Поэтому я бы не использовал его, если бы был вами, даже за счет краткости кода на несколько строк. Вы также хотите поставить точку с запятой в конце инструкции «unshift». Первый аргумент splice () указывает индекс для начала удаления элементов, а второй аргумент указывает количество аргументов для удаления.
var data= ["email","role","type","name"]; data.splice(data.indexOf("role"), 1); data.unshift('role');
var data= ["email","role","type","name"]; if ("role" in data) data.splice(data.indexOf("role"),1); data.unshift("role"); data;