2016-11-17 2 views
1

Учитывая следующий код:Как создать массив массивов из массива объектов с использованием .map?

var data = []; 
for (let i = 0; i <2; i++) { 
    data.push({ 
    "a": "1", 
    "b": "2" 
    }); 
} 

console.log(data); 

data.map((el) => { 
    var row = Object.keys(el).map(key => el[key]); 
    console.log(row); 
    return row; 
}); 

console.log(data); 

Почему это не производит массив массивов, например:

[ 
    ["1", "2"], 
    ["1", "2"] 
] 

Вот это CodePen: http://codepen.io/24ma13wg/pen/MbbQZr

+6

Метод карты не мутирует массив, он просто возвращает новый массив. Что вам не хватает, так это использование возвращаемого значения карты. –

ответ

-1

Это делает почти. Вам нужно сохранить результат Array#map.

var data = [], result; 
 
for (let i = 0; i <2; i++) { 
 
    data.push({ 
 
    "a": "1", 
 
    "b": "2" 
 
    }); 
 
} 
 

 
result = data.map(el => Object.keys(el).map(key => el[key])); 
 
// ^^^^^ missing assignment 
 

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

-1

Если вы хотите обновить массив, вы должны сделать это вручную:

var data = []; 
 
for (let i = 0; i <2; i++) { 
 
    data.push({ 
 
    "a": 2*i, 
 
    "b": 2*i+1 
 
    }); 
 
} 
 
console.log(data); 
 
data.forEach((el,i,arr) => { 
 
    arr[i] = Object.keys(el).map(key => el[key]); 
 
}); 
 
console.log(data);

рассмотреть также с помощью ES2017-х Object.values:

data = data.map(Object.values); 
+0

Вы сделали тот же опыт, что вечером больше обратного вращения? –

+0

@NinaScholz Не уверен. Утром я не отвечаю. Но вечером я не получаю много нисходящих ничей – Oriol

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