3

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?

2

3 Answers 3

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

Sign up to request clarification or add additional context in comments.

Comments

2

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

Comments

0

Use forEach for arrays :)

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.