Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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在2D数组周围创建填充的最佳方法是什么_Javascript_Multidimensional Array_2d - Fatal编程技术网

使用javascript在2D数组周围创建填充的最佳方法是什么

使用javascript在2D数组周围创建填充的最佳方法是什么,javascript,multidimensional-array,2d,Javascript,Multidimensional Array,2d,寻找使用javascript在2d数组周围添加填充的最佳(即最不复杂的O(n)方式。应生成“边缘”。目标是将0添加到二维阵列的边缘。下面的示例确实有效,但可能更好。也尽量不使用双for循环。递归函数可能更好,请注意,起始数组可以是任何值,包括所有0。”“fill”只是填充中的值,可以是任何值。最后,任意长度的2d数组如何 let arr = [ [1, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 1] ]; functi

寻找使用javascript在2d数组周围添加填充的最佳(即最不复杂的O(n)方式。应生成“边缘”。目标是将0添加到二维阵列的边缘。下面的示例确实有效,但可能更好。也尽量不使用双for循环。递归函数可能更好,请注意,起始数组可以是任何值,包括所有0。”“fill”只是填充中的值,可以是任何值。最后,任意长度的2d数组如何

let arr = [
  [1, 1, 1, 1], 
  [1, 0, 0, 1], 
  [1, 0, 0, 1], 
  [1, 1, 1, 1]
];

function addPadding(array, fill) {
    let edge = [fill,fill,fill,fill,fill,fill];
    for(let i = 0; i < array.length; i++) {
        array[i].push(0);
        array[i].unshift(0);
    }
    array.push(edge);
    array.unshift(edge);
    return array;
};

arr = addPadding(arr, 0);

console.log('Finally');
console.table(arr);

/**
* expected output
*┌─────────┬───┬───┬───┬───┬───┬───┐
*│ (index) │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │
*├─────────┼───┼───┼───┼───┼───┼───┤
*│    0    │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │
*│    1    │ 0 │ 1 │ 1 │ 1 │ 1 │ 0 │
*│    2    │ 0 │ 1 │ 0 │ 0 │ 1 │ 0 │
*│    3    │ 0 │ 1 │ 0 │ 0 │ 1 │ 0 │
*│    4    │ 0 │ 1 │ 1 │ 1 │ 1 │ 0 │
*│    5    │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │
*└─────────┴───┴───┴───┴───┴───┴───┘
*/


让arr=[
[1, 1, 1, 1], 
[1, 0, 0, 1], 
[1, 0, 0, 1], 
[1, 1, 1, 1]
];
函数addPadding(数组、填充){
让边=[填充,填充,填充,填充,填充,填充];
for(设i=0;i
假设所有数组大小相同。我要做的是

  • 我将首先将每行转换为字符串
  • 然后,我将在每个字符串的前面和后面填充零
  • 将它们转换回数组
  • 在主数组的前面和后面填充字符串的数量,并将它们转换为数组
  • 您可以在字符串前面加上
    +
    ,使其成为整数。这里的
    +
    是一元运算符
  • 不确定复杂性,但我相信,这应该更容易。除了两个映射之外,我没有使用任何循环来将数组转换为字符串并返回到数组

    让arr=[
    [1, 1, 1, 1],
    [1, 0, 0, 1],
    [1, 0, 0, 1],
    [1, 1, 1, 1]
    ];
    arr=arr.map(a=>“0”+a.join(“”+0”);
    常数pad=“0”。重复(arr[0]。长度);
    反移位排列(pad);
    arr.push(pad);
    arr=arr.map(a=>a.split(“”).map(n=>+n));
    
    控制台.工作台(arr)如果我们只是想创建一些值的填充,无论是int还是string,我们都可以这样做。此方法不考虑不同的填充维度。总体复杂度约为4

    let arr = [
        [1, 1, 1, 1], 
        [1, 0, 0, 1], 
        [1, 0, 0, 1], 
        [1, 1, 1, 1]
      ];
      
      function addPadding(array, fill) {
        const edge = Array(array.length + 2).fill(fill);
        array = array.map(a => {
            a.push(fill);
            a.unshift(fill);
            return a;
        });
        array.push(edge);
        array.unshift(edge);
        return array;
      };
      
      arr = addPadding(arr, 0);
      
      console.log('Finally');
      console.table(arr);
    

    谢谢分享。这里有一些好主意,喜欢用地图来复制数组。另外,在复制数组时使用join方法也很好。函数返回的数组仍然是字符串类型。此外,repeat()的使用意味着现在填充必须是字符串。@JoshuaConnor感谢您让我知道这个问题。我已经修好了。参见第5点:您可以在字符串前面加上
    +
    ,使其成为整数。这里的
    +
    是一元运算符。你现在怎么想?@JoshuaConnor欢迎来到Stack Overflow。请看,也请阅读,以便您熟悉如何使用这个平台。是的,这是一个很好的修复,我做了一些更改,在输入函数时,填充可以是任何值,使用javascripts和其他函数。再次感谢您的发帖。@JoshuaConnor您认为现在可以接受答案了吗?你会得到一些分数,我也会得到一些分数。欢迎来到堆栈溢出。请看,也通过了,这样你就会熟悉如何使用这个平台。这也很好。我的答案有多复杂,只是好奇?