Как поменять местами значения массива? Javascript

Я использую Листовка и пытаюсь создать полилинию и маркерные точки, но это дает противоположные широту и долготу, поэтому мне приходится их менять местами. Создать маркер легко, потому что он имеет только одну пару широты и длины, но создать полилинию сложно, потому что у нее много точек.
Ниже показано, что я сейчас использую для замены широты и долготы маркерными точками.

var splitObj = objVal.toString().split("],[");
var latlng = splitObj.map(function(x)
    {
        var couple= (/\d+.\d+, \d+.\d+/g).exec(x).toString();
        var splitted = couple.split(", ");
        return "["+splitted[1]+","+splitted[0]+"]";
    });
latlng.join();

Результат:

['[[a, b], [c, d], [e, f]]'] // this is the objVal
expectation:
['[[b,a], [d,c], [f,e]]']
reality:
['[b,a]']

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

map над массивом и для каждого внутреннего массива возвращать новый массив после замены элементов местами.

const data = [[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]];

const result = data.map(arr => {
  return [arr[1], arr[0]];
});

console.info(result);

Еще проще вот так: const result = data.map(([la, lo]) => ([lo, la]));.

jsN00b 23.03.2022 06:32

Если подумать, я думаю, что в вопросе ОП массив data выглядит так: const data = ['[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]']. Весь внутренний массив находится в кавычках. Итак, он отображается как строка, а не массив.

jsN00b 23.03.2022 06:50

результаты [Array(2)] 0: Array(2) 0: "[" 1: "[" длина: 2

Jane Doe 23.03.2022 07:07

Чтобы использовать это решение/метод, вам нужно передать ему вложенный массив значений широты и долготы. Например: [[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]] <-- это вложенный массив, где внутренний массив представляет собой значения lat-long. Какой именно ваш вклад - он такой, как тот, что выше, или он такой: ['[[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]]']. Это массив всего из одного элемента, и этот элемент — string.

jsN00b 23.03.2022 07:15

@JaneDoe а) почему данные широты/долготы вашего буклета представлены массивом строк, и б) почему вы хотите преобразовать массив широты/долготы обратно в строки?

Andy 23.03.2022 08:40

@Энди, я думал, что это лучший способ разделить их, лол

Jane Doe 23.03.2022 08:50

Это настоящий массив, это JSON? @Джейн Доу. Если это JSON, как вы его разбираете? Ваше обновление теперь не имеет смысла, потому что a и b относятся к переменным, а не к реальным числам.

Andy 23.03.2022 08:52
Ответ принят как подходящий

Предполагая, что ввод представляет собой строку значений, подобных вложенному массиву, приведенное ниже решение может помочь в преобразовании/замене значений широты и долготы.

Фрагмент кода

const inpVal = ['[[a, b], [c, d], [e, f]]'];

// helper method to strip first & last char of a string
const stripFirstLast = s => s.slice(1, s.length - 1);

// helper method to swap lat & longitutde values
const swapLatLon = ([lat, lon]) => [lon, lat];

// place holder to safe-keep value of input
const tmp = stripFirstLast(inpVal[0])
  .replaceAll('], ', '] | ')
  .split(' | ');

// calculate the result
const res = ["[" +
  tmp.map(
    x => '[' +
    swapLatLon(
      stripFirstLast(x).split(', ')
    ).join(', ') +
    ']'
  ).join(', ') +
  "]"
];

// console-log to validate/verify
console.info(
  'input: ', inpVal,
  '\nresult: ', res
);

Объяснение

Встроенные комментарии объясняют используемый подход.

Замена фактическими значениями (а не строкой)

This is an almost-exact replica of Andy's solution/answer with only one change instead of handling the inner array as arr, the iterator directly accesses the lat & lon values. I think it makes the solution a little more easier to read.

// Previous solution where the orig data was not taken as a string
const swapLoLa = arr => arr.map(([lon, lat]) => [lat, lon]);
const orig = [[124.432841, 8.3963], [124.496898, 8.3963], [124.571937, 8.40898]];
console.info(
  'orig arr: ', orig,
  '\nswapped arr: ', swapLoLa(orig)
);

Другие вопросы по теме