Я пытаюсь преобразовать строку 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?
да, используя Object.values и Array#map
вы не можете, так как между ними нет никакой связи. :)
Возможный дубликат Как преобразовать массив объектов в массив массивов
проверь мой ответ, может тебе поможет братан
Вам просто нужен массив 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), если «значения» являются методом объекта. Я потерялся в этой части.
Array#map
` принимает обратный вызов. Object.values
работает напрямую и имеет только один параметр. Без вызывающих круглых скобок вы могли бы передать этот метод, как и любой другой обратный вызов.
Спасибо, очень умное решение.
используйте функцию уменьшения для 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)
Какая связь между ними?