首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将网格数组[][]缩减为字符串

将网格数组[][]缩减为字符串
EN

Code Review用户
提问于 2019-02-10 23:07:30
回答 1查看 74关注 0票数 0

我有一个属性为grid[][]的类,每个值都是true或false。我需要把它转换成字符串,用字母o和b来代替布尔值。

首先,对数组进行简单的for循环并返回字符串:

代码语言:javascript
代码运行次数:0
运行
复制
 get rle() {
     let result = "";
     for(let y = 0; y < this.grid.length; y++) {
         for(let x =0; x < this.grid[y].length; x++) {
             result += ( (this.grid[y][x]) ?  "o" : "b" );
         }
     }
     return result;
}

还是更像JS风格的解决方案?

代码语言:javascript
代码运行次数:0
运行
复制
get rle() {
    return this.grid.reduce( (total, currentValue, currentIndex, arr) => {
        return total + arr[currentIndex].reduce( (total, currentValue, currentIndex, arr) => {
            return total + ( (arr[currentIndex]) ?  "o" : "b" );
        }, "");
    }, "");
 }

这是一个好的JS风格的解决方案,你认为什么更好?我更喜欢第一种,因为任何人都能立即理解它。JS解决方案使我皱眉与3嵌套返回,看起来很奇怪。

EN

回答 1

Code Review用户

回答已采纳

发布于 2019-02-11 04:35:41

首先,您编写的代码中的几个要点。如果您有一个值数组,您可以将这些值组合在一起,以有效地创建一个字符串。这将消除对至少一个reduce调用的需求。其次,在减少调用中,第二个回调参数(代码中的currentValue)的值是索引参数(代码中的arr[currentIndex])的数组参数的值。结合Javascript忽略多余函数参数的功能,您的reduce调用应该只接受两个参数,并使用currentValue代替arr[currentIndex]

您还应该避免在同一个作用域中使用相同的变量名。拥有两组totalcurrentValuecurrentIndexarr可能很快就会引起混淆,并导致奇怪的bug。

现在,对于一个班轮来说:

代码语言:javascript
代码运行次数:0
运行
复制
return this.grid.flat().map((el) => el ? "o" : "b").join("");

参见Array#flatArray#map和前面提到的Array#join。其中,Array#flat是最新的,可能是不受支持的方法。它可以很容易地多填充或更换。MDN页面显示了一些聪明的替代品,如arr.reduce((all, row) => all.concat(row), [])[].concat(...arr)

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/213218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档