首页 > 解决方案 > 遍历不规则行长的矩阵

问题描述

我有一个矩阵,其中行不一定具有相同的长度:

以下是 solfege 格式的音乐标记。

const notes = [
    [ 'do5', 'mi5' ],
    [ 'mi6', 'so6', 'ti6', 're7' ],
    [ 'so7', 'ti7', 're8', 'fa8' ],
    [ 'la3', 'do4', 'mi4' ],
    [ 'fa2', 'la2' ],
    [ 're2' ],
    [ 'ti1', 're2', 'fa2' ]
];

我有一个函数可以将这些标记转换为等效的字母标记(例如:fa2 将使用我的函数转换为 F2)。

我希望能够迭代这个矩阵,并返回转换后的矩阵,它应该保留相同的维度。

谢谢,纳库尔

标签: javascriptmatrixiteration

解决方案


这可能是您想要的:

const notes = [
    [ 'do5', 'mi5' ],
    [ 'mi6', 'so6', 'ti6', 're7' ],
    [ 'so7', 'ti7', 're8', 'fa8' ],
    [ 'la3', 'do4', 'mi4' ],
    [ 'fa2', 'la2' ],
    [ 're2' ],
    [ 'ti1', 're2', 'fa2' ]
];

// replace this function with your own converter
function convert(note) {
    return note.toUpperCase();
}

for (let i = 0; i < notes.length; i++) {  // for each row
    // map will iterate through the row, converting each note
    notes[i] = notes[i].map(convert);
}

该部分map(convert)只是map(note => convert(note)).

这不是很有效,因为map()将为每一行创建一个新数组,但在您的情况下,代码的可读性而不是性能可能更重要,所以这很好。


推荐阅读