多维数组.一种求解算法
Multidimensional Arrays. An algorithm for solving
下午好!
我需要实现以下算法。如果矩阵的元素M x N=0,那么行和列的所有元素都要赋值0。
这是我的解决方案:
var arr = [[1, 2, 3, 4],
[5, 0, 7, 8],
[8, 9, 10, 11]];
var vertical, horizontal;
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
if (arr[i][j] == 0) {
vertical = j;
horizontal = i;
}
}
}
for (var k = 0; k < arr.length; k++) {
if (k == horizontal) {
for (var l = 0; l < arr[k].length; l++) {
arr[k][l] = 0;
}
}
}
for (var a = 0; a < arr.length; a++) {
for (var b = 0; b < arr[a].length; b++) {
if (b == vertical) {
arr[a][b] = 0;
}
}
}
for (var c in arr) {
document.write(arr[c] + '<br />');
}
在我看来这不是很合理。如何简化代码?
我会将for循环更改为Array.prototype.forEach()
。
-
首先查找值为
0
的所有单元格,并存储项引用。 -
遍历项目列表,并将所有列和行的值更改为零。
var arr = [[1, 2, 3, 4], [5, 6, 0, 8], [8, 9, 10, 11]],
p = [];
arr.forEach(function (a, i) {
a.forEach(function (b, j) {
if (b === 0) {
p.push({ x: i, y: j });
}
});
});
p.forEach(function (a) {
arr[a.x] = arr[a.x].map(function () { return 0; });
arr.forEach(function (b) { b[a.y] = 0; });
});
document.write('<pre>items: ' + JSON.stringify(p, 0, 4) + '</pre>');
document.write('<pre>arr: ' + JSON.stringify(arr, 0, 4) + '</pre>');
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- 有没有一种方法可以从URL跟踪请求的域
- 有没有一种方法可以列出Ember.Object的所有绑定
- 有没有一种方法可以获得three.js的最小/lite版本
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- 一种从随机数的序列中查找值的简单算法
- 寻找一种算法来聚类三维点,围绕二维点
- JavaScript排序函数是如何工作的(作为一种算法)
- 多维数组.一种求解算法
- 一种算法,用于判断从列表中识别一个单词需要多少个不同的先导字符
- 是否有一种方法可以使用HTML5大纲算法和CSS(可能还有JS)生成文档导航
- 寻找一种 FP 算法来从点分隔的字符串组成对象