【问题标题】:How to iterate through 2D array and filter single values from the array如何遍历二维数组并过滤数组中的单个值
【发布时间】:2021-06-27 21:59:58
【问题描述】:

我正在尝试创建一个类似于填字游戏的游戏。我将我的字母存储到这个数组中。我可以帮忙从我的这个二维数组中提取单词吗?

let testArr = [
    ["T", " ", " ", " "],
    ["E", "A", "R", " "],
    ["S", " ", " ", " "],
    ["T", " ", " ", " "]
];

let storeWords = [];

function loop() {
    let storeRowLetters = [];
    let storeColLetters = [];

    for (let col = 0; col < testArr.length; col++) {
        for (let row = 0; row < testArr[col].length; row++) {
            console.log(testArr[row][col])
            storeColLetters.push(testArr[row][col]);
        }
    }

    console.log("Next output scans the row")
    for (let col = 0; col < testArr.length; col++) {
        for (let row = 0; row < testArr[col].length; row++) {
            console.log(testArr[col][row])
            storeRowLetters.push(testArr[col][row]);
        }
    }

    console.log(storeColLetters.join(''))
    console.log(storeRowLetters.join(''))
}

loop()

我从控制台日志收到的输出是

从我图片的最后2行,我想从T EAR S TTEST A REAR的字符串中提取单词TEST。所以基本上我想丢弃自己的字母。获取单词后,我想将它们推送到我的storeWords数组中。

【问题讨论】:

  • 你的话有最小长度吗?
  • 目前最少 2 个字母,所以我可以接受 AT、ON、IT 等字词

标签: javascript loops multidimensional-array filter iteration


【解决方案1】:

如何遍历二维数组

var cubes = [
 [1, 2, 3],
 [4, 5, 6],    
 [7, 8, 9],
];

for(var i = 0; i < cubes.length; i++) {
    var cube = cubes[i];
    for(var j = 0; j < cube.length; j++) {
        display("cube[" + i + "][" + j + "] = " + cube[j]);
    }
}

您可以查看For loop in multidimensional javascript array

你可以过滤

var arr = [{"nid":"31","0":{"tid":"20","name":"Bench Press","objectDate":"2012-02-08","goal":"rep","result":"55.00","comments":"sick!","maxload":"250"},"1":{"tid":"22","name":"Back Squat","objectDate":"2012-02-08","goal":"time","result":"8.00","comments":"i was tired.","maxload":"310"}},{"nid":"30","0":{"tid":"19","name":"Fran","objectDate":"2012-02-07","goal":"time","result":"5.00","comments":null}}];


function filterByProperty(array, prop, value){
    var filtered = [];
    for(var i = 0; i < array.length; i++){

        var obj = array[i];

        for(var key in obj){
            if(typeof(obj[key] == "object")){
                var item = obj[key];
                if(item[prop] == value){
                    filtered.push(item);
                }
            }
        }

    }    

    return filtered;

}

var byName = filterByProperty(arr, "name", "Fran");
var byGoal = filterByProperty(arr, "goal", "time");

在这里找到更多细节:How to filter multidimensional JavaScript array

【讨论】:

  • 看来您回答的问题与上述不同...
【解决方案2】:

如果您看到空格或退出循环,您可以收集临时单词并存储。

const
    array = [["T", " ", " ", " "], ["E", "A", "R", " "], ["S", " ", " ", " "], ["T", " ", " ", " "]],
    words = [],
    lengths = [array.length, array[0].length];

for (let j = 0; j < lengths[1]; j++) {
    let temp = '';
    for (let i = 0; i < lengths[0]; i++) {
        if (array[i][j] !== ' ') {
            temp += array[i][j];
            continue;
        }
        if (temp.length > 1) words.push(temp);
        temp = '';
    }
    if (temp.length > 1) words.push(temp);
}        

for (let i = 0; i < lengths[0]; i++) {
    let temp = '';
    for (let j = 0; j < lengths[1]; j++) {
        if (array[i][j] !== ' ') {
            temp += array[i][j];
            continue;
        }
        if (temp.length > 1) words.push(temp);
        temp = '';
    }
    if (temp.length > 1) words.push(temp);
}

console.log(words);

【讨论】:

  • 是否有可能与你们中的一个 stackoverflow 用户进行不和谐的通话? xD
猜你喜欢
  • 2011-07-18
  • 2016-09-04
  • 2015-04-07
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多