Массив объектов на объекты с модификациями - PullRequest
0 голосов
/ 19 мая 2018

Привет,

Вопрос: Как я могу преобразовать это:

 console.log(prepararCoordenadas([
    { "nome": "Salvador",       "coordenadas": ["-23.6821604","-46.8754915"]},
    { "nome": "Brasília",  "coordenadas": ["-22.9137531","-73.5860657"]},
    { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
  ]));

на этом?

{ 
  '0':
   { nome: 'Salvador',
     coordenadas: [-46.8755, -23.6822 ] },
  '1':
   { nome: 'Brasília',
     coordenadas: [-73.5861, -22.9137] },
  '2': { nome: 'Recife', 
          coordenadas: [-35.0001, -8.0463] }
}

Разница между двумя результатами.

Первый
- это массив объектов
- Иметь название города и массив "coordenadas", как строка.

Второй
- законченный объект - Иметь название города (то же самое, что и первый) и массив "coordenadas", таких как десятичное число с 4 числами после точки;- Широта и долгота изменены - положение - первая долгота ;

Язык: Javascript

Я пытался использовать ** Object.assign ** но не хватало изменений с "coordenadas".

function prepararCoordenadas(array){

    let obj = Object.assign({},array);

    return obj;
  }

  // Test
  console.log(prepararCoordenadas([
    { "nome": "Salvador",       "coordenadas": ["-23.6821604","-46.8754915"]},
    { "nome": "Brasília",  "coordenadas": ["-22.9137531","-73.5860657"]},
    { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
  ]));

Может ли кто-нибудь помочь с этой функцией головоломки?

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Вы можете reduce в объект и преобразовывать coordenadas с каждой итерацией:

const strToFixed4 = str => Number(str).toFixed(4);
const prepararCoordenadas = (array) => array.reduce(
  (accum, { nome, coordenadas: [lat, lng] }, i) => (
    {
      ...accum,
      [i]: { nome, coordenadas: [strToFixed4(lng), strToFixed4(lat)] }
    }),
  {}
);

console.log(prepararCoordenadas([
  { "nome": "Salvador",       "coordenadas": ["-23.6821604","-46.8754915"]},
  { "nome": "Brasília",  "coordenadas": ["-22.9137531","-73.5860657"]},
  { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
]));
0 голосов
/ 19 мая 2018

Окончательный ответ, ребята!Спасибо тебе, два!

const prepararCoordenadas = (array) => array.reduce(
  (accum, { nome, coordenadas: [lat, lng] }, i) => (
    {
      ...accum,
      [i]: { nome, coordenadas: [Number(parseFloat(lng).toFixed(4)), Number(parseFloat(lat).toFixed(4))] }
    }),
  {}
);

console.log(prepararCoordenadas([
  { "nome": "São Paulo",       "coordenadas": ["-23.6821604","-46.8754915"]},
  { "nome": "Rio de Janeiro",  "coordenadas": ["-22.9137531","-73.5860657"]},
  { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
]));
0 голосов
/ 19 мая 2018
function prepararCoordenadas(array){
    let objs = {...array}; //es6 spread operator
    for (index in objs) { //for each object in objs
        objs[index].coordenadas.forEach(coordenada => Number(coordenada)); //for each coordenada in coordenadas array, convert type to number
    }
    return objs;
  }

Оператор распространения es6 в этом случае практически делает то же самое, что и object.assign (), однако он имеет гораздо более простой синтаксис.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...