Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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/2/apache-kafka/3.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:更新矩阵数组_Javascript_Arrays_Matrix - Fatal编程技术网

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
    });
}