Javascript:更新矩阵数组
我需要更新矩阵数组的帮助。它从设置值开始,我需要传入坐标以更新值 我有一个基本矩阵:Javascript:更新矩阵数组,javascript,arrays,matrix,Javascript,Arrays,Matrix,我需要更新矩阵数组的帮助。它从设置值开始,我需要传入坐标以更新值 我有一个基本矩阵: var myMatrix = [ ['-','-','-','-','-','-','-','-','-','-'], ['-','-','-','-','-','-','-','-','-','-'], ['-','-','-','-','-','-','-','-','-','-'], ['-','-','-','-','-','-','-','-','-','-'],
var myMatrix = [
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-'],
['-','-','-','-','-','-','-','-','-','-']
];
我能够更新矩阵中的特定点,如下所示:
----x-----
-----x----
--------x-
--------x-
---x------
----------
-------x--
----------
----x-----
-------x--
使用此功能:
function stepTwo(coordinates) {
console.log('Step Two');
for(var j =0; j < coordinates.length; j ++) {
myMatrix[coordinates[j].y][coordinates[j].x] = 'x';
}
for(var i = 0; i < myMatrix.length; i++) {
console.log(myMatrix[i].join(' '));
}
}
var coordinatesArray = [
{x: 4, y: 0},
{x: 5, y: 1},
{x: 8, y: 2},
{x: 8, y: 3},
{x: 3, y: 4},
{x: 7, y: 6},
{x: 4, y: 8},
{x: 7, y: 9},
];
stepTwo(coordinatesArray);
基本上是在行中传递,以及要将多少“-”转换为“x”
我目前的工作(第三步是我需要帮助的地方):
感谢您的帮助 短解
我假设您要转到第行点[j].y
并创建点[j].x
x
for(var j = 0; j < points.length; j++) {
for(var k = 0; k < points[j].x; k++) {
myMatrix[points[j].y][k] = 'x';
}
}
短解
我假设您要转到第行点[j].y
并创建点[j].x
x
for(var j = 0; j < points.length; j++) {
for(var k = 0; k < points[j].x; k++) {
myMatrix[points[j].y][k] = 'x';
}
}
这是我对这个问题的看法——按照所需的数量创建一个新的x数组,并对切片的剩余部分进行浓缩():
这是我对这个问题的看法——按照所需的数量创建一个新的x数组,并对切片的剩余部分进行浓缩():
提示:使用
Array.prototype.some
或Array.prototype.map
。这个功能非常简单。看看你的小提琴:注意。。。第二步没有更新数组。您必须返回结果。数组不是通过引用传递的。@emmanuelday。而且他甚至没有在任何地方通过阵列。它在全局范围内定义,函数正在访问完全相同的变量(在范围内)。提示:使用Array.prototype.some
或Array.prototype.map
。这个功能非常简单。看看你的小提琴:注意。。。第二步没有更新数组。您必须返回结果。数组不是通过引用传递的。@emmanuelday。而且他甚至没有在任何地方通过阵列。它是在全局范围内定义的,函数正在访问完全相同的变量(在范围内)。您可以优化for循环或更好:使用forEach
@Shadowen,这正是我所需要的,谢谢@约书亚。无论如何,重点不是优化;这是学习。如果你想优化,你会从点删除所有重复的行。
首先…@Shadowen optimize是一个错误的词。我的情绪有所改善。forEach是一种比for更好的编码样式(如果您想迭代数组)。很明显,当你第一眼看到代码时,你在做什么。对于(…)您必须“分析”表达式。速度。。。是 啊这有时是不好的,但在这种情况下,我们没有高性能的应用程序。如果使用for而不是foreach,则使用for(var i=0,pointNumber=points.length;i@JoshuaK这一点已经讨论过很多次了。使用简单的for
循环通常是最简单的(风格方面)。再次,我必须向您指出JSPerf。如果您使用的是现代浏览器(Chrome、IE9等)我相信for
实际上比for cached
快。你可以优化for循环或更好:使用forEach
@Shadowen,这正是我所需要的,谢谢!@JoshuaK。无论如何,重点不是优化,而是学习。如果你想优化,你会从点删除所有重复的行首先…@Shadowen optimize是一个错误的词。元素改进。forEach是一种比for更好的编码风格(如果你想在数组上迭代)。很明显,在你第一眼看到代码的时候你在做什么。对于(…)你必须“分析”表达式。速度…是的。这有时很糟糕,但在这种情况下,我们没有高性能的应用程序。如果使用for而不是foreach,则使用for(var i=0,pointNumber=points.length;i@JoshuaK这一点已经讨论过很多次了。这通常是最简单的(风格方面)使用一个简单的for
循环。再次,我必须向您指出JSPerf。如果您使用的是现代浏览器(Chrome、IE9等),我相信for
实际上比for cached
更快。这非常好用,很欣赏评论!这非常好用,很欣赏评论!
for(var pointNumber = 0; pointNumber < points.length; pointNumber++) {
// Pick one point
var currentPoint = points[pointNumber];
// We want to set the points (0, row) .. (currentPoint.x, row), so we use another loop.
var row = currentPoint.y;
// Set all the columns to 'x'
for(var column = 0; column < currentPoint.x; column++) {
myMatrix[row][column] = 'x';
}
}
function stepThree(points) {
points.forEach(function(entry) {
var row = myMatrix[entry.y];
if(!row) { // if no row continue to next iteration
return;
}
var fillNum = entry.x > row.length ? row.length : entry.x; // if the number to fill is higher than length use length
myMatrix[entry.y] = new Array(fillNum + 1) // create an array which is bigger by 1 from places to fill
.join('x') // join it using x's getting the right number
.split('') // split it to create new array
.concat(row.slice(fillNum)); // add the leftovers
});
}