it-swarm.com.ru

Переместить элемент в объекте в последнюю позицию

У меня есть массив объектов. Я хочу переместить выбранный объект в последнюю позицию в массиве. Как мне сделать это в JavaScript или JQuery?

Вот код, который у меня есть:

var sortedProductRow = this.product_row;

for (var s in sortedProductRow) {
    if (sortedProductRow[s]["parent_product_type"] != "")
        // Move this object to last position in the array
}

Я перебираю это с помощью цикла for и хочу, чтобы выходные данные были упорядочены таким образом, чтобы все объекты, у которых нет значения parent_product_type, были первыми, а затем объекты со значением.

12
Johan Dahl

чтобы переместить элемент (индекс которого вы знаете) в конец массива, сделайте это:

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

Если у вас нет индекса, а есть только элемент, сделайте это:

array.Push(array.splice(array.indexOf(element), 1)[0]);

Пример:

    var arr = [1, 2, 6, 3, 4, 5];
    arr.Push(arr.splice(arr.indexOf(6), 1)[0]);
    console.log(arr); // [1, 2, 3, 4, 5, 6]

НОТА: 

это работает только с массивами (созданными с синтаксисом [ ... ] или Array()), но не с объектами (созданными с синтаксисом { ... } или Object())

29
Ferdi265

Перемещение первого элемента массива в конец того же массива

    var a = [5,1,2,3,4];
    a.Push(a.shift());
    console.log(a); // [1,2,3,4,5]

или так

    var a = [5,1,2,3,4];
    var b = a.shift();
    a[a.length] = b;
    console.log(a); // [1,2,3,4,5]

Перемещение любого элемента массива в любую позицию в том же массиве

    // move element '5' (index = 2) to the end (index = 4)
    var a = [1, 2, 5, 4, 3];
    a.splice(4,0,a.splice(2,1)[0]);
    console.log(a); // [1, 2, 4, 3, 5]

или он также может быть преобразован в прототип, например, где x представляет текущую позицию элемента, а y представляет новую позицию в массиве

var a = [1, 2, 5, 4, 3];
Array.prototype.move = function(x, y){
      this.splice(y, 0, this.splice(x, 1)[0]);
      return this;
    };
    
    a.move(2,4);
    console.log(a); // ["1", "2", "4", "3", "5"]

2
hex494D49

Используя анонимную функцию, вы можете передать массив и значение для фильтрации.

let concatToEnd = function (arr, val) {
        return arr.filter(function(x) {
            return x !== val; // filter items not equal to value
        }).concat(arr.filter(function(x) { // concatonate to filtered array
            return x === val; // filter items equal to value 
        })
    );
}

// invoke
concatToEnd(array, 'parent_product_type');

Вы могли бы сократить это дальше:

let concatToEnd = (arr,val) => arr.filter(x => x !== val).concat(arr.filter(x => x === val))

Эта функция фильтрует элементы, которые не равны переданному значению, затем объединяет результат (до конца отфильтрованного массива) функции anotherfilter, которая отфильтровывает элементы, которые равны значение, которое вы передали.

Эта функция по существу разделяет массив на 2 отфильтрованные части, а затем объединяет их вместе

Это не было проверено для вашего варианта использования, но я использовал нечто подобное, чтобы переместить все числа массива в конец индекса.

0
UncaughtTypeError