0

Я экспериментировал с функциями map/filter/reduce, и я хочу отклониться от использования для циклов.Как вернуть массив объектов в массивы?

Я хочу, чтобы превратить объект массивы

var foo = [{"z":5, "y":10, "x":15}, {"z":30, "y":40, "x":50}]; 

в многомерный массив. В основном конечный результат должен быть [[5, 10, 15], [30, 40, 50]] без объектов, просто массивов. Я знаю, как сделать это для одного объекта:

Object.keys(foo[0]).map(function(key) { 
    return foo[0][key]; 
}); 

, который дает мне первый массив [5, 10, 15]. Но я хочу, чтобы он повторялся для остальных, поэтому я знаю, что мне нужна функция .map. До сих пор у меня есть:

foo.map(function(bar) { 
     var foobar = Object.keys(bar).map(function(key){ 
      return foo[key]; 
     }); 
    return foo; 
}); 

Может кто-нибудь объяснить, что я делаю неправильно

+0

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

ответ

0

Вы return test; вместо return the Object.keys логика

var foo = [{"z":5, "y":10, "x":15}, {"z":30, "y":40, "x":50}]; 
 

 
var fooArray = foo.map(function(bar) { 
 
    return Object.keys(bar).map(function(key){ 
 
     return bar[key]; 
 
    }); 
 
}); 
 

 
console.log(fooArray)

+0

должен возвращать 'бар [ключ]' внутри карты – charlietfl

+0

Да, просто заметил, что фиксация –

0

попробовать:

// for each object in the array 
foo.map(function(bar) { 
    // return an array 
    // containing the values of each key in the object 
    return Object.keys(bar).map(function(key){ 
     return bar[key]; 
    }); 
}); 
1

Там очень простой способ сделать это:

var newFoo = foo.map(el=>Object.values(el)); 

Это современный, ES2017 код. Object.values получает значения объекта в массиве. Код говорит «для каждого элемента в foo, получить значения объекта и вернуть их в массив».

Вы можете сделать это в пре-2017 код с чем-то вроде этого:

var newFoo = foo.map(function(el) { 
    var values = []; 
    for (var key in el) { 
     if (el.hasOwnProperty(key)) { 
      values.push(el[key]); 
     } 
    } 
    return values; 
}); 
0

Ваш код хорошо, только с двумя ошибками:

  1. должен возвращать «бар [ключ]» вместо «foo [key]» в функции внутренней карты.
  2. Должен возвращать «foobar» вместо «foo» во внешней функции карты.

foo.map(function(bar) { 
 
     var foobar = Object.keys(bar).map(function(key){ 
 
      return bar[key]; 
 
     }); 
 
    return foobar; 
 
});

Смежные вопросы