Сортировать массив объектов по совпадению с другим массивом JS REACT REDUX - PullRequest
0 голосов
/ 14 октября 2019

У меня есть 2 массива. FIRST выглядит следующим образом:

const arrOjObjects = [
{text: "HUF", value: 300.3803314317},
{text: "GBP", value: 0.7925201485},
{text: "IDR", value: 14127.9996377796},
{text: "ILS", value: 3.5020374898},
{text: "DKK", value: 6.7633795164}]

Second выглядит следующим образом:

const arr = ["ILS, "DKK"]

Мне нужно отсортировать arrOjObjects по некоторому правилу, если элементы текста объекта соответствуют элементу массива arr,тогда объект должен быть первым, а все остальные объекты за ним

Мне нужно какое-то правило сортировки, которое будет сортировать мой arr в это состояние:

const arrOjObjects = [
{text: "ILS", value: 3.5020374898}, // ILS is in arr
{text: "DKK", value: 6.7633795164} //  DKK is in arr
{text: "HUF", value: 300.3803314317},
{text: "GBP", value: 0.7925201485},
{text: "IDR", value: 14127.9996377796},
]

Спасибо за ответы!

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Вы можете использовать Array.prototype.sort

const arrOjObjects = [
	{text: "HUF", value: 300.3803314317},
	{text: "GBP", value: 0.7925201485},
	{text: "IDR", value: 14127.9996377796},
	{text: "ILS", value: 3.5020374898},
	{text: "DKK", value: 6.7633795164}]

	const arr = ["ILS", "DKK"];

	arrOjObjects.sort((a, b) => arr.includes(b.text) - arr.includes(a.text));

	console.log(arrOjObjects);
0 голосов
/ 14 октября 2019

Это должно работать

arrOjObjects.sort((a, b) => {
  if (arr.includes(a.text) && !arr.includes(b.text)) {
    return -1;
  } else if (!arr.includes(a.text) && arr.includes(b.text)) {
    return 1;
  } else {
    return a.value - b.value;
  }
});
0 голосов
/ 14 октября 2019

Не могу придумать элегантного решения вашей проблемы. Но вот прямой путь решения вашей проблемы.

Во-первых, найдите нужные элементы в соответствии с вашим поисковым массивом

let sorted = [];
for (let sortText of arr) {
   let res = arrOjObjects.find((obj) => {
       return obj.text === sortText;
   });
   if (res) sorted.push(res);
}

После чего вставьте оставшиеся значения, которые не являются частьюкритериев поиска

let remaining = arrOjObjects.filter((obj) => {
    return !arr.includes(obj.text);
});
sorted = [...sorted, ...remaining];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...