Преобразовать массив в разделенный канал - PullRequest
0 голосов
/ 29 сентября 2019

Как преобразовать массив EX - ["lat", "long", "abc", "def", "abcc", "deef",] в [lat, long |abc, def |abcc, deef] в javascript.

У меня проблема с матрицей расстояний Api ...

Ниже мой код

export async function getStoreDistance(locationDetails) {
  destinationRequest = [];
  let destinationRequest = locationDetails.destinations.map(location => {
    console.log('destreqlocation', location);
    return `${location.lat},${location.long} `;
  });

  return await axios
    .get(
      `https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial
      &origins=${locationDetails.origins.map(function(locationDetail) {
        return locationDetail;
      })}
      &destinations=${destinationRequest}&key=**********`,
    )
    .then(function(response) {
      // handle success
      // return response;
    })
    .catch(function(error) {
      // handle error
      return error;
    });
}

Ответы [ 3 ]

0 голосов
/ 29 сентября 2019

Мое решение проблемы.

const so1 = ["lat","long","abc","def","abcc","deef"]

let result = so1
  .map((item, id, array) => ((id % 2) !== 0 && id !== (array.length - 1)) ? item + '|' : (id !== (array.length - 1)) ? item + '&' : item)
  .join('')
  .replace(/&/g, ',')

console.log( result )
console.log( `[${result}]` )
0 голосов
/ 29 сентября 2019

Старомодный цикл for должен хорошо работать:

function getStoreDistance(locationDetails) {
  destinationRequest = locationDetails[0] || "";
  for (let i = 1; i < locationDetails.length; i++) {
    destinationRequest += (i % 2 ? "," : " | ") + locationDetails[i];
  }
  return destinationRequest;
}

// Demo
let response = ["lat","long","abc","def","abcc","deef"];
console.log(getStoreDistance(response));
0 голосов
/ 29 сентября 2019

Попробуйте что-то вроде ниже

input = ["lat", "long", "abc", "def", "abcc", "deef"];

const [lat, long, ...rest] = input;

res = rest.reduce((acc, val, index) => {
    if(index % 2 === 0) acc.push([]);
    acc[acc.length -1].push(val);
    return acc;
}, []);

resFinal = [[lat, long], ...res];
console.log(resFinal);

resFinalStr = resFinal.reduce((acc, val, index)=> {
    if(index !== resFinal.length -1){
        acc+=(val.join(",")) + "|";
    }else{
        acc += val.join(",")
    }
    return acc;
}, "")

console.log(resFinalStr)
console.log(`[${resFinalStr}]`)
...