我尝试只使用Array.prototype
中的方法创建n * n
单位矩阵(欢迎调用其他方法)。我可以使用fill()
创建n*n
矩阵,但如果不使用if-else
,则无法将对角元素转换为1。
function matrix(n) {
var nSizeArray = Array(n).fill().map(function(elem) {
return Array(elem).fill(0).indexOf([elem][elem]=1)
})
return nSizeArray
}
matrix(5)
以上只是我想做的一些演示,我无法理解如何使用可用的数组方法不断填充数组和访问数组中的[i][i]
元素。
5条答案
按热度按时间tuwxkamq1#
可以使用以下函数创建**
n * n
单位矩阵**:ubof19bj2#
编辑:哦,好吧,我刚刚看到你写了 * 只有数组中的方法。原型 * 而不仅仅是 * 只有函数 *...所以我猜你也不想包括
Math
函数?map
的第二个参数是元素的索引,我们将使用它来用1
s填充矩阵中的正确点。现在我们需要一种方法,在每个位置上分配一个
1
,在每个位置上分配一个i == j
,在每个位置上分配一个0
,而不使用显而易见的if..else
方法,我们可以利用i == j
等价于i - j == 0
这一事实。现在的任务是将每个
(i,j)
Map为i - j == 0
到1
,以及i - j != 0
到0
。我们使用以下代码行来执行此操作:
Math.min(...)
确保i - j == 0
Map到0
,所有其他索引组合Map到1
(因为它们会导致|i-j| >= 1
)。通过从1
中减去此结果,我们可以简单地翻转 * 位 * 并获得所需的结果:gt0wga4j3#
您可以尝试:
如果不使用if else(或三元运算),结果将是一个博利矩阵。
jckbn6z74#
我用ES6函数做了这个例子。
h7wcgrx35#