Сортировка массива объектов из другого массива объектов JQUERY - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть два массива объектов ниже

var array_1 = [{"Product_Name" : "p1"},{"Product_Name" : "p2"},{"Product_Name" : "p3"}]
var array_2 = [{"Product_Name" : "p5"},{"Product_Name" : "p1"},{"Product_Name" : "p3"},{"Product_Name" : "p2"},{"Product_Name" : "p4"}]

, как вы можете видеть, что мой второй массив находится не в том порядке, что и первый массив. я пытаюсь упорядочить второй массив так же, как массив 1.

я использую приведенный ниже код, но получаю результат

function mapOrder (array, order, key) {

array.sort( function (a, b) {
var A = a[key], B = b[key];

if (order.indexOf(A) == order.indexOf(B)) {
  return 1;
} else {
  return -1;
}

});

return array;
};

var item_array, item_order, ordered_array;
item_array = array_2;
item_order = array_1;
ordered_array = mapOrder(item_array, item_order, 'Product_Name');

любые предложения получают второй массив, как показано ниже

var array_2 = [{"Product_Name" : "p1"},{"Product_Name" : "p2"},{"Product_Name" : "p3"},{"Product_Name" : "p4"},{"Product_Name" : "p5"}]

1 Ответ

1 голос
/ 21 апреля 2020

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

var array_1 = [{"Product_Name" : "p1"},{"Product_Name" : "p2"},{"Product_Name" : "p3"}]
var array_2 = [{"Product_Name" : "p5"},{"Product_Name" : "p1"},{"Product_Name" : "p3"},{"Product_Name" : "p2"},{"Product_Name" : "p4"}]

function btoa(a, b, key){
  b.map((m,from_ind)=> {
    let to_ind = a.findIndex((target)=>target[key] == m[key])
    if(from_ind != to_ind && to_ind >= 0) {
        let temp = b[to_ind];
        b[to_ind] = m;
        b[from_ind] = temp;
    }

  })

  console.log(b)
  return b
}

btoa(array_1, array_2, "Product_Name");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...