最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to transform a matrix into array with one row - Stack Overflow

programmeradmin2浏览0评论

Consider a matrix B= [[6,4,1,2], [5,3,9,7],[1,3,2,1]];. B is a matrix with three rows and four columns. I want to treat it as an array or a vector, namely B1=[6,4,1,2,5,3,9,7,1,3,2,1]. Moreover, I want to have, for instance, that B1[3]=2 - so it's a number, not a vector anymore. I wrote a simple function

function NewArray(Matrix){
var Temp = [];
var w = Matrix[0].length;
var h = Matrix.length;
for (i=0; i<w; i++){
    for (j=0; j<h; j++){
        Temp.push(Matrix[i][j]);
        }
    }
    return Temp;

}

It occours haowever, that it works only, when B is quadratic. What is wrong?

Consider a matrix B= [[6,4,1,2], [5,3,9,7],[1,3,2,1]];. B is a matrix with three rows and four columns. I want to treat it as an array or a vector, namely B1=[6,4,1,2,5,3,9,7,1,3,2,1]. Moreover, I want to have, for instance, that B1[3]=2 - so it's a number, not a vector anymore. I wrote a simple function

function NewArray(Matrix){
var Temp = [];
var w = Matrix[0].length;
var h = Matrix.length;
for (i=0; i<w; i++){
    for (j=0; j<h; j++){
        Temp.push(Matrix[i][j]);
        }
    }
    return Temp;

}

It occours haowever, that it works only, when B is quadratic. What is wrong?

Share Improve this question edited Oct 10, 2018 at 13:28 zorro47 asked Oct 10, 2018 at 13:23 zorro47zorro47 2211 silver badge12 bronze badges 2
  • 2 just switch w and h, so w = Matrix.length; and h = Matrix[0].length; – Omar Commented Oct 10, 2018 at 13:28
  • Possible duplicate of Merge/flatten an array of arrays in JavaScript? – stealththeninja Commented Oct 10, 2018 at 14:35
Add a ment  | 

3 Answers 3

Reset to default 6

You can use apply and concat methods in order to write a simplified solution.

B = [[6,4,1,2], [5,3,9,7],[1,3,2,1]]
B1 = [].concat.apply([], B);
console.log(B1);

Another approach is to use spread syntax

B = [[6,4,1,2], [5,3,9,7],[1,3,2,1]]
B1 = [].concat(...B);
console.log(B1);

You could take the length of the nested array, instead of a predefined value in advance.

function newArray(matrix) {
    var temp = [],
        i, j, h, w;
    for (i = 0, h = matrix.length; i < h; i++) {
        for (j = 0, w = matrix[i].length; j < w; j++) {
            temp.push(matrix[i][j]);
        }
    }
    return temp;
}

console.log(newArray([[6, 4, 1, 2], [5, 3, 9, 7], [1, 3, 2, 1]]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

Use forEach for arrays :)

var mergedArr = [];
B.forEach(function(arr){
    arr.forEach(function(num){
        mergedArr.push(num) 
    }); 
});
发布评论

评论列表(0)

  1. 暂无评论