Javascript преобразует строку JSON в массив массивов

Я пытаюсь преобразовать строку JSON со следующими данными:

{
    "locations": [{
        "info": "7811 N. Octavia",
        "longitude": -87.8086439,
        "latitude": 42.0229656
    }, {
        "info": "PO Box 271743",
        "longitude": -73.087749,
        "latitude": 41.6032207
    }, {
        "info": "P.O. Box 269",
        "longitude": -86.7818523,
        "latitude": 34.0667074
    }]
}

к следующей структуре:

var locations = [
    ['Bondi Beach', -33.890542, 151.274856],
    ['Coogee Beach', -33.923036, 151.259052],
    ['Cronulla Beach', -34.028249, 151.157507],
    ['Manly Beach', -33.80010128657071, 151.28747820854187],
    ['Maroubra Beach', -33.950198, 151.259302]
];

Есть ли способ добиться этого с помощью javascript?

Какая связь между ними?

31piy 08.04.2019 12:36

да, используя Object.values ​​и Array#map

Jaromanda X 08.04.2019 12:37

вы не можете, так как между ними нет никакой связи. :)

AZ_ 08.04.2019 12:41

Возможный дубликат Как преобразовать массив объектов в массив массивов

adiga 08.04.2019 12:44

проверь мой ответ, может тебе поможет братан

Bathri Nathan 08.04.2019 13:00
Поведение ключевого слова "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) для оценки ваших знаний,...
0
5
303
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вам просто нужен массив forEach() на locations:

var obj = {"locations":[{"info":"7811 N. Octavia","longitude":-87.8086439,"latitude":42.0229656},{"info":"PO Box 271743","longitude":-73.087749,"latitude":41.6032207},{"info":"P.O. Box 269","longitude":-86.7818523,"latitude":34.0667074}]};

var res = [];
obj.locations.forEach(function(location){
  var innerArr = [];
  innerArr.push(location.info);
  innerArr.push(location.longitude);
  innerArr.push(location.latitude);
  res.push(innerArr);
});
console.info(res);
Ответ принят как подходящий

const obj = {
    "locations": [{
        "info": "7811 N. Octavia",
        "longitude": -87.8086439,
        "latitude": 42.0229656
    }, {
        "info": "PO Box 271743",
        "longitude": -73.087749,
        "latitude": 41.6032207
    }, {
        "info": "P.O. Box 269",
        "longitude": -86.7818523,
        "latitude": 34.0667074
    }]
};

locations = obj.locations.map(({info, longitude, latitude}) => [info, longitude, latitude]);

console.info(locations);

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

Вы можете использовать Карта массива

//Parsing JSON string to json object
var dataObj = JSON.parse('{"locations":[{"info":"7811 N. Octavia","longitude":-87.8086439,"latitude":42.0229656},{"info":"PO Box 271743","longitude":-73.087749,"latitude":41.6032207},{"info":"P.O. Box 269","longitude":-86.7818523,"latitude":34.0667074}]}')

//Using map to iterate over dataObj.locations and break the object into array based on keys
var locations = dataObj.locations.map(x => [x.info, x.longitude, x.latitude])

console.info(locations)

Этот код принимает любую структуру объекта

let obj = {
  "locations": [{
      "info": "7811 N. Octavia",
      "longitude": -87.8086439,
      "latitude": 42.0229656
  }, {
      "info": "PO Box 271743",
      "longitude": -73.087749,
      "latitude": 41.6032207
  }, {
      "info": "P.O. Box 269",
      "longitude": -86.7818523,
      "latitude": 34.0667074
  }]
}

let arr = obj.locations.map(value => {
  let _arr = [];
  for (let key of Object.keys(value)) {
    _arr.push(value[key]);
  }
  return _arr
});

console.info(arr);

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

var object = { locations: [{ info: "7811 N. Octavia", longitude: -87.8086439, latitude: 42.0229656 }, { info: "PO Box 271743", longitude: -73.087749, latitude: 41.6032207 }, { info: "P.O. Box 269", longitude: -86.7818523, latitude: 34.0667074 }] },
    locations = object.locations.map(Object.values);

console.info(locations);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Не могли бы вы объяснить, как работает .map(Object.values), если «значения» являются методом объекта. Я потерялся в этой части.

Eduardo Garcia 09.04.2019 17:23
Array#map` принимает обратный вызов. Object.values работает напрямую и имеет только один параметр. Без вызывающих круглых скобок вы могли бы передать этот метод, как и любой другой обратный вызов.
Nina Scholz 09.04.2019 18:49

Спасибо, очень умное решение.

Eduardo Garcia 10.04.2019 23:07

используйте функцию уменьшения для ittrate и поместите ее значение в массив и получите значение. Проверьте приведенный ниже код.

let v  = {
    "locations": [{
        "info": "7811 N. Octavia",
        "longitude": -87.8086439,
        "latitude": 42.0229656
    }, {
        "info": "PO Box 271743",
        "longitude": -73.087749,
        "latitude": 41.6032207
    }, {
        "info": "P.O. Box 269",
        "longitude": -86.7818523,
        "latitude": 34.0667074
    }]
}


let array = v.locations
let value = [];
let result = array.reduce( function( sample, data){
  sample = [];
	sample.push(data.info)
  sample.push(data.longitude)
  sample.push(data.latitude)
  value.push(sample);
  return sample
},[] )

console.info("Final Value:",value)

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