Преобразование массива объектов в массив значений объекта

#jquery #arrays #json

#jquery #массивы #json

Вопрос:

Я получаю набор данных, используя getJSON вот так:

 var url = 'http://localhost:5000/api/items';
$.getJSON(url, function(response) {
  var response2 = []
  console.log(response)
});
 

Мой вывод на консоль выглядит следующим образом:

 [{"id": 1, "price": 20, "name": "test"}, {"id": 4, "price": 30, "name": "test2"}]
 

Мне нужно преобразовать эти значения в массив в этом формате:

 [[1, 20, "test"], [4, 30, "test2"]]
 

Я попробовал следующий код, но результат отличается:

 $.each(response, function (key, val) {
  response2.push(val)
});

console.log(response2)  // output = [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
 

Любая помощь действительно ценится!

Ответ №1:

Чтобы сделать то, что вам требуется, вы можете использовать Object.values для получения значений всех свойств из объекта в виде массива. Оттуда вы можете использовать map() для создания нового массива, содержащего их все:

 // AJAX response:
let response = [{"id": 1, "price": 20, "name": "test"}, {"id": 4, "price": 30, "name": "test2"}];

let  response2 = response.map(Object.values);
console.log(response2); 

Ответ №2:

Если вам нужно сделать это, используя array here, есть другой способ.

Демонстрационный код :

 var response = [{
  "id": 1,
  "price": 20,
  "name": "test"
}, {
  "id": 4,
  "price": 30,
  "name": "test2"
}]
var outerarray = [];
$.each(response, function(key, val) {
  innerarray = []
  innerarray.push(val.id, val.price, val.name) //push value
  outerarray.push(innerarray)
});
console.log(outerarray) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 

Комментарии:

1. Большое вам спасибо и извините за «нубовский» вопрос 🙂