Конвертировать объект в двумерный массив, но удалить ключи - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь преобразовать следующее:

let JSON = [
    {1:"hello",2:"goodbye",3:"bonjour"},
    {4:"hello2",5:"goodbye2",6:"bonjour2"},
    {7:"hello3",8:"goodbye3",9:"bonjour3"},
    {10:"hello4",11:"goodbye4",12:"bonjour4"}
]

в это:

let arr = [
    ["hello","goodbye","bonjour"],
    ["hello2","goodbye2","bonjour2"],
    ["hello3","goodbye3","bonjour3"],
    ["hello4","goodbye4","bonjour4"]
]

Я пытался:

var row1 = JSON.map(function(e) {
    return [ e.1, e.2, e.3];
});
var row2 = JSON.map(function(e) {
    return [ e.4, e.5, e.6];
});
var row3 = JSON.map(function(e) {
    return [ e.7, e.8, e.9];
});
var row4 = JSON.map(function(e) {
    return [ e.10, e.11, e.12];

let array = [row1,row2,row3,row4] 

Но ничего не могу получить за работой. Буду признателен за любую помощь:)

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Попробуйте это:

let JSON = [
  {1:"hello",2:"goodbye",3:"bonjour"},
  {4:"hello2",5:"goodbye2",6:"bonjour2"},
  {7:"hello3",8:"goodbye3",9:"bonjour3"},
  {10:"hello4",11:"goodbye4",12:"bonjour4"}
];

let arr = JSON.map(obj => {
  return Object.values(obj);
});
0 голосов
/ 10 марта 2020

Учитывая ваши данные выборки, кажется, вы могли бы просто использовать Object.values:

let original = [
  {1:"hello",2:"goodbye",3:"bonjour"},
  {4:"hello2",5:"goodbye2",6:"bonjour2"},
  {7:"hello3",8:"goodbye3",9:"bonjour3"},
  {10:"hello4",11:"goodbye4",12:"bonjour4"}
]

var array = original.map(Object.values);

console.log(array);

Это работает, потому что порядок элементов в каждом объекте совпадает с порядком, которого вы хотите достичь в массиве результатов.

Если это так не всегда (например, у вас есть {12:"bonjour4",11:"goodbye4",10:"hello4"}, и вы все еще хотите вернуть ["hello4","goodbye4","bonjour4"]), вы можете сначала отсортировать записи по их ключам. Например:

let original = [
  {1:"hello",2:"goodbye",3:"bonjour"},
  {4:"hello2",5:"goodbye2",6:"bonjour2"},
  {7:"hello3",8:"goodbye3",9:"bonjour3"},
  {12:"bonjour4",11:"goodbye4",10:"hello4"}
]

var array = original
  .map(obj => Object
    .entries(obj)
    .sort(([k1], [k2]) => k1 - k2)
    .map(([_, v]) => v));

console.log(array);

В качестве примечания, я бы предостерег вас от использования имени JSON, так как это скроет встроенный JSON объект,

0 голосов
/ 10 марта 2020

Вы можете использовать стандартный for l oop для итерации ключа объекта и pu sh значений объекта в массив (упорядоченный), который вы возвращаете, все в пределах обратного вызова Array.map. Кроме того, ваша проблема заключается в том, что Array.map работает с каждым элементом массива, а не только по одному за раз. Вот почему ваш код не работает так, как вы ожидали.

let JSON = [
    {1:"hello",2:"goodbye",3:"bonjour"},
    {4:"hello2",5:"goodbye2",6:"bonjour2"},
    {7:"hello3",8:"goodbye3",9:"bonjour3"},
    {10:"hello4",11:"goodbye4",12:"bonjour4"}
]

const result = JSON.map(a=>{
    const b = [];
    for(var k in a){
        b.push(a[k]);
    }
    return b;
});

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