Получение каждого n-го значения массивов в Javascript и нажатие каждого n-го значения в массив [duplicate]

ethanc спросил: 12 мая 2018 в 04:00 в: javascript

У этого вопроса уже есть ответ:

  • Transposing a 2D-array in JavaScript 16 ответов

У меня есть массив с массивами внутри него, который выглядит так:

var arr = [
  ["title1", "title2", "title3"],
  ["description1", "description2", "description3"],
  ["id1", "id2", "id3"]
];

И я хочу взять каждое n-е значение из массивов и вставить его в новый объект, чтобы он выглядел так:

 var newArr = [
    ["title1", "description1", "id1"],
    ["title2", "description2", "id2"],
    ["title3", "description3", "id3"],
 ];

Я знаю, что я могу использовать цикл for в этом случае , но я не уверен, как получить каждое n-ое значение.

EDIT: Решение было перенос 2D-массива , как указано в CRice.


3 ответа

Nina Scholz ответил: 12 мая 2018 в 04:21

Вы можете уменьшить массивы, указав индекс из внешнего массива в качестве индекса для внутреннего массива и наоборот.

var array = [["title1", "title2", "title3"], ["description1", "description2", "description3"], ["id1", "id2", "id3"]],
    result = array.reduce(
        (r, a, i) => {
            a.forEach((v, j) => (r[j] = r[j] || [])[i] = v);
            return r;
        },
        []
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
idmean ответил: 12 мая 2018 в 04:18
Теперь это правильная обфускация ...
Nishant Dixit ответил: 12 мая 2018 в 04:38
Я думаю, что использование сокращения и forEach, а не просто forLoop, не является хорошим выбором !.
Nina Scholz ответил: 12 мая 2018 в 04:40
@NishantDixit, и почему?
Vitalii ответил: 12 мая 2018 в 04:14

Вот 100% -ное решение для работы. Работайте, даже если длина arr и arr [0] не соответствует:

    var arr = [
        ["title1", "title2", "title3", "title4"],
        ["description1", "description2", "description3", "description4"],
        ["id1", "id2", "id3", "id4"],
    ];    var newArr = [];    if(arr[0]){
        for(var i=0; i<arr[0].length; i++){
            newArr[i] = new Array();            for(var a=0; a<arr.length; a++){
                if(arr[a][i]){
                    newArr[i].push(arr[a][i])
                }
            }
        }
    }
Nishant Dixit ответил: 12 мая 2018 в 04:14

Я думаю, что цикл for будет хорошим выбором для этого типа прецедента.

var arr = [
    ["title1", "title2", "title3"],
    ["description1", "description2", "description3"],
    ["id1", "id2", "id3"]
];

var resultArray = [];

for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < 3; j++) {
        resultArray[j] = resultArray[j] || [];
        resultArray[j][i] = arr[i][j];
    }
}
console.log(resultArray);