Сортировка второго массива по первому массиву в javascript - PullRequest
2 голосов
/ 18 апреля 2020

Например, например. Мой

Mainarray = [{label:a,value:5} ,
{label :b , value :4 },
{label :c , value :10},
{label :d , value :5}]

и мой сортируемый массив:

array1 = [ {label :c ,value 5},{label :a ,value:2}

после сортировки массива1 он должен быть таким:

sortedarray= [{label:a,value :2} ,
{label :b , value :0 },
{label :c , value :5},
{label :d , value :0}]

поэтому, в основном, он должен быть отсортирован по метке MainArray, а также, если эта метка не существует в array1, он должен добавить ту же метку к тому же индексу со значением 0

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Вы можете собрать новые значения в Map и сопоставить массив данных с новыми значениями или нулем.

var data = [{ label: 'a', value: 5 }, { label: 'b', value: 4 }, { label: 'c', value: 10 }, { label: 'd', value: 5 }],
    array = [{ label: 'c', value: 5 }, { label: 'a', value: 2 }],
    values = new Map(array.map(({ label, value }) => [label, value])),
    result = data.map(({ label }) => ({ label, value: values.get(label) || 0 }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 18 апреля 2020

Вам необходимо сопоставить нужный набор данных, а затем отсортировать сопоставленный набор данных. Вот пример. Надеюсь, это поможет!

const array = [
  { label: 'c', value: 5 },
  { label: 'b', value: 4 },
  { label: 'a', value: 10 },
  { label: 'd', value: 5 }
]

const toSort = [
  { label: 'b', value: 1 },
  { label: 'a', value: 5 },
  { label: 'c', value: 2 }
];

const mapToSort = array.map(_ => {
  const item = toSort.find(x => x.label === _.label);
  return item || { label: _.label, value: 0 };
})

const getIndex = item => array.findIndex(_ => _.label === item.label);
const sorted = mapToSort.sort((a, b) => getIndex(a) - getIndex(b));

console.log(JSON.stringify(sorted));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...