Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用高阶函数的N*N大小的单位矩阵_Javascript_Arrays_Higher Order Functions - Fatal编程技术网

Javascript 使用高阶函数的N*N大小的单位矩阵

Javascript 使用高阶函数的N*N大小的单位矩阵,javascript,arrays,higher-order-functions,Javascript,Arrays,Higher Order Functions,我正在尝试创建一个n*n标识矩阵,仅使用数组中的方法。prototype(欢迎调用其他方法)。我可以使用fill()创建n*n矩阵,但如果不使用if-else,则无法将对角元素转换为1 函数矩阵(n){ var nSizeArray=Array(n).fill().map(函数(elem){ 返回数组(elem).fill(0).indexOf([elem][elem]=1) }) 返回nSizeArray } 矩阵(5)编辑:哦,我刚刚看到您只编写了数组中的方法。原型不仅仅是函数。。。所以我

我正在尝试创建一个
n*n
标识矩阵,仅使用
数组中的方法。prototype
(欢迎调用其他方法)。我可以使用
fill()
创建
n*n
矩阵,但如果不使用
if-else
,则无法将对角元素转换为1

函数矩阵(n){
var nSizeArray=Array(n).fill().map(函数(elem){
返回数组(elem).fill(0).indexOf([elem][elem]=1)
})
返回nSizeArray
}

矩阵(5)
编辑:哦,我刚刚看到您只编写了数组中的方法。原型不仅仅是函数。。。所以我猜你也不想包含
Math
函数

map
的第二个参数是元素的索引,我们将使用
1
s填充矩阵中的正确点

现在我们需要一种方法,在每个位置分配一个
1
,在每个位置分配一个
i==j
和一个
0
,而不使用明显的
if..else
方法。我们可以使用这样一个事实:
i==j
相当于
i-j==0

因此,现在的任务是将每个
(i,j)
i-j==0
映射到
1
i-j!=0
0

我们使用这一行进行此操作:

return 1 - Math.min(Math.abs(i-j),1);
Math.min(…)
确保将
i-j==0
映射到
0
,所有其他索引组合映射到
1
(因为它们导致
|i-j |>=1
)。通过从
1
中减去该结果,我们可以简单地翻转位并获得所需的结果:

函数矩阵(n){
返回数组(n).fill(0).map(函数(elem,i){
返回数组(n).fill(0).map(函数(elem2,j){
返回1-数学最小值(数学绝对值(i-j),1);
});
});

}
编辑:哦,我刚刚看到您只编写了数组中的方法。prototype不仅仅是函数。。。所以我猜你也不想包含
Math
函数

map
的第二个参数是元素的索引,我们将使用
1
s填充矩阵中的正确点

现在我们需要一种方法,在每个位置分配一个
1
,在每个位置分配一个
i==j
和一个
0
,而不使用明显的
if..else
方法。我们可以使用这样一个事实:
i==j
相当于
i-j==0

因此,现在的任务是将每个
(i,j)
i-j==0
映射到
1
i-j!=0
0

我们使用这一行进行此操作:

return 1 - Math.min(Math.abs(i-j),1);
Math.min(…)
确保将
i-j==0
映射到
0
,所有其他索引组合映射到
1
(因为它们导致
|i-j |>=1
)。通过从
1
中减去该结果,我们可以简单地翻转位并获得所需的结果:

函数矩阵(n){
返回数组(n).fill(0).map(函数(elem,i){
返回数组(n).fill(0).map(函数(elem2,j){
返回1-数学最小值(数学绝对值(i-j),1);
});
});
}
您可以尝试:

function matrix(n) {
    return Array(n).fill(Array(n).fill())
    .map(function (xs, i) {
        return xs.map(function (x, j) {
            return i === j ? 1 : 0;
        })
    });
}
matrix(5)
如果不使用If-else(或三元运算),结果将是boleean矩阵。

您可以尝试使用:

function matrix(n) {
    return Array(n).fill(Array(n).fill())
    .map(function (xs, i) {
        return xs.map(function (x, j) {
            return i === j ? 1 : 0;
        })
    });
}
matrix(5)

如果不使用If-else(或三元运算),结果将是一个boleean矩阵。

您可以使用以下函数创建一个
n*n
标识矩阵

const-eye=n=>[…数组(n)].map((e,i,a)=>a.map(e=>+!i--);
控制台日志(眼睛(3));
// [ [ 1, 0, 0 ],
//   [ 0, 1, 0 ],

//[0,0,1]
您可以使用以下函数创建一个
n*n
标识矩阵:

const-eye=n=>[…数组(n)].map((e,i,a)=>a.map(e=>+!i--);
控制台日志(眼睛(3));
// [ [ 1, 0, 0 ],
//   [ 0, 1, 0 ],

//[0,0,1]
我发现了一些类似的东西,但偶然发现了一些我无法解释的东西。也许你能帮忙。为什么内在地图什么都不做?德普。。。我想出来了。。。map并没有修改源数组本身,它只是返回修改后的数组。我发现了一些类似的东西,但我发现了一些我无法解释的东西。也许你能帮忙。为什么内在地图什么都不做?德普。。。我想出来了。。。map不修改源数组本身,它只返回修改后的数组。else-if绝对没有问题。else-if绝对没有问题。我觉得使用
array::fill
更现代(更符合OPs原始代码)。如果您认为编辑太麻烦,请随意回滚。我觉得使用
Array::fill
更现代(并且更符合OPs原始代码)。如果您认为编辑太过烦人,请随意回滚