Javascript - 从数字值创建金字塔数组

时间:2016-05-19 13:55:23

标签: javascript arrays

我希望从数字值创建金字塔数组。要求是我要从一个数组中工作,在我的例子中有3行,每列5列。我需要创建一个类似于下面例子的金字塔。

这就是我想要实现的目标......

[0, 0, 1, 0, 0]
[0, 1, 1, 1, 0]
[1, 1, 1, 1, 1]

到目前为止,我的代码看起来像这样..



var a = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]];

function array_pyramid( array ){
    for (i = 0; i < array.length; i++){
        for (j = 0; j <= Math.floor(array[i].length / 2); j++){
            var tmp = array[i].length / 2;
            console.log (Math.floor(tmp));
            if ( i < j ) {
                array[i][j] = 1;
            }
        }
    }
    return array;
}

function print_array(array) {
    for (var i = 0; i < array.length; i++) {
        console.log(array[i]);
    }
}

//console.log(a);
//print_array(a);
print_array(array_pyramid(a));
&#13;
&#13;
&#13;

5 个答案:

答案 0 :(得分:1)

尝试以下示例。我故意保持变量名称的长度和描述性,并将操作保持在多个步骤而不是内联以便于分析。

END_DATE

答案 1 :(得分:0)

对于您可能提出的大多数其他情况,这可能会失败,但在此特定情况下可以使用:

function array_pyramid( array ){
    var mid = Math.floor(array[0].length/2);
    for(var i=0;i<array.length;i++){
        for(var j=0;j<array[i].length;j++){
        var boundsLower = mid-i;
        var boundsUpper = mid+i;
        if(j>=boundsLower && j<=boundsUpper){
            array[i][j] = 1;
        }
      }
    }
    return array;
}

实例:https://jsfiddle.net/o6t1cbdu/

答案 2 :(得分:0)

试试这个......

function array_pyramid(array){
   var limit = [0,0];
   for (var i = array.length - 1, limit = [0, (array[0] || []).length - 1]; i >= 0; i--) {
       for (var j = limit[0]; j <= limit[1]; j++) {
           array[i][j] = 1;
       }
       limit[0]++; limit[1]--;
   }
   return array;
}

我希望它有所帮助

答案 3 :(得分:0)

你正在开始使用内圈和外圈的正确轨道,以及你使用分区来试图考虑中点。

以下是对代码进行详细且经过大量注释的修改,可以记录任意数量的列(奇数偶数),并使用在行进展期间扩展的范围确定哪些列应该是1或0.我已经包含了第二个数组b,以表明它也适用于偶数列计数。

var a = [
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ],
    b = [
        [0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0]
    ];

function array_pyramid (a) {
        // Use first row to determine row length, assume all others are the same
    var base_length = a[0].length,
        // Get a modulus to account for odd or even row length
        mod = base_length % 2,
        // Find the middle point
        mid_point = Math.floor(base_length / 2) + mod,
        // Account for zero-index of arrays
        zero_indexed = mid_point - 1,
        // Produce an initial set of boundaries
        marker_range = {
            lower: zero_indexed,
            upper: (mod === 1) ? zero_indexed : (zero_indexed + 1)
        };

    // Iterate the array's rows
    a.forEach(function (row) {
        // Iterate the row's cols
        row.forEach(function (col, i) {
            // Compare index to boundaries to determine if we're outputting a 1 or a 0
            row[i] = (i >= marker_range.lower && i <= marker_range.upper) ? 1 : 0;
        });

        // If we still have room to expand, widen the range in each direction
        if (marker_range.lower > 0) {
            marker_range.lower -= 1;
            marker_range.upper += 1;
        }
    });

    return a;
}

function print_array(a) {
    var i;

    console.log('-- Start output');

    for (i = 0; i < a.length; i++) {
        console.log(' ', a[i]);
    }

    console.log('-- End output');
    console.log(' ');
}

console.log('a (odd col count):');
print_array(array_pyramid(a));

console.log('b: (even col count)');
print_array(array_pyramid(b));

答案 4 :(得分:0)

所以这是我的代码,它运行正常。 我们的想法是找到矩阵的主垂直中心,sideA和sideB变量代表金字塔的左侧和右侧。一旦找到了边,你就会使它们与它们之间的一切以及它们之间的所有东西(if (j <= sideA && j >= sideB))相等。我希望有所帮助。 :)

function array_pyramid ( array ) {
    var item, sideA, sideB;

    if (array instanceof Array) {
        for (var i = 0; i < array.length; i++) {
            item = array[i];
            centerIndex = Math.floor(item.length / 2);
            sideA = centerIndex + i;
            sideB = centerIndex - i;

            for (var j = 0; j < item.length; j++) {
                if (j <= sideA && j >= sideB) {
                    item[j] = 1;
                }
            }
        }

        return array;

    } else {
        return 'Invalid array';
    }
}

array_pyramid ([
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
]);

在控制台中运行该代码时,它将返回:

[0, 0, 1, 0, 0]
[0, 1, 1, 1, 0]
[1, 1, 1, 1, 1]

就是这样。