it-swarm-id.com

Dapatkan kolom dari array dua dimensi 

Bagaimana saya bisa mengambil kolom dari array 2 dimensi dan bukan satu entri? Saya melakukan ini karena saya ingin mencari string di salah satu kolom saja jadi jika ada cara lain untuk mencapai ini tolong katakan padaku. 

Saya menggunakan array yang didefinisikan dengan cara ini:

var array=[];

Pada akhirnya ukuran array ini adalah 20 (col) x3 (baris) dan saya perlu membaca baris pertama dan memeriksa keberadaan beberapa frasa di dalamnya.

41
Ameen

Anda harus mengulang setiap elemen dalam array 2d, dan mendapatkan kolom n th.

    function getCol(matrix, col){
       var column = [];
       for(var i=0; i<matrix.length; i++){
          column.Push(matrix[i][col]);
       }
       return column;
    }

    var array = [new Array(20), new Array(20), new Array(20)]; //..your 3x20 array
    getCol(array, 0); //Get first column
18
Rob W

Mengambil kolom mudah dengan fungsi map .

// a two-dimensional array
var two_d = [[1,2,3],[4,5,6],[7,8,9]];

// take the third column
var col3 = two_d.map(function(value,index) { return value[2]; });

Kenapa repot-repot dengan irisan sama sekali? Cukup filter matriks untuk menemukan baris yang menarik.

var interesting = two_d.filter(function(value,index) {return value[1]==5;});
// interesting is now [[4,5,6]]

Sayangnya, filter dan peta tidak tersedia secara native di IE9 dan lebih rendah . Dokumentasi MDN menyediakan implementasi untuk browser tanpa dukungan asli.

94
Leif Carlsen

Gunakan Array.prototype.map() dengan fungsi panah :

const arrayColumn = (arr, n) => arr.map(x => x[n]);

const twoDimensionalArray = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

console.log(arrayColumn(twoDimensionalArray, 0));

Catatan: Array.prototype.map() dan fungsi panah adalah bagian dari ECMAScript 6 dan tidak didukung di mana-mana, lihat tabel kompatibilitas ECMAScript 6 .

25

Fungsi ini berfungsi untuk array dan objek . Obs: berfungsi seperti fungsi php array_column. Ini berarti bahwa parameter ketiga opsional dapat dilewati untuk menentukan kolom apa yang akan sesuai dengan indeks pengembalian.

function array_column(list, column, indice){
    var result;

    if(typeof indice != "undefined"){
        result = {};

        for(key in list)
            result[list[key][indice]] = list[key][column];
    }else{
        result = [];

        for(key in list)
            result.Push( list[key][column] );
    }

    return result;
}

Ini adalah versi bersyarat:

function array_column_conditional(list, column, indice){
    var result;

    if(typeof indice != "undefined"){
        result = {};

        for(key in list)
            if(typeof list[key][column] !== 'undefined' && typeof list[key][indice] !== 'undefined')
                result[list[key][indice]] = list[key][column];
    }else{
        result = [];

        for(key in list)
            if(typeof list[key][column] !== 'undefined')
                result.Push( list[key][column] );
    }

    return result;
}

kegunaan:

var lista = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

var obj_list = [
  {a: 1, b: 2, c: 3},
  {a: 4, b: 5, c: 6},
  {a: 8, c: 9}
];

var objeto = {
  d: {a: 1, b: 3},
  e: {a: 4, b: 5, c: 6},
  f: {a: 7, b: 8, c: 9}
};

var list_obj = {
  d: [1, 2, 3],
  e: [4, 5],
  f: [7, 8, 9]
};

console.log( "column list: ", array_column(lista, 1) );
console.log( "column obj_list: ", array_column(obj_list, 'b', 'c') );
console.log( "column objeto: ", array_column(objeto, 'c') );
console.log( "column list_obj: ", array_column(list_obj, 0, 0) );

console.log( "column list conditional: ", array_column_conditional(lista, 1) );
console.log( "column obj_list conditional: ", array_column_conditional(obj_list, 'b', 'c') );
console.log( "column objeto conditional: ", array_column_conditional(objeto, 'c') );
console.log( "column list_obj conditional: ", array_column_conditional(list_obj, 0, 0) );

Keluaran:

/*
column list:  Array [ 2, 5, 8 ]
column obj_list:  Object { 3: 2, 6: 5, 9: undefined }
column objeto:  Array [ undefined, 6, 9 ]
column list_obj:  Object { 1: 1, 4: 4, 7: 7 }

column list conditional:  Array [ 2, 5, 8 ]
column obj_list conditional:  Object { 3: 2, 6: 5 }
column objeto conditional:  Array [ 6, 9 ]
column list_obj conditional:  Object { 1: 1, 4: 4, 7: 7 }
*/
2
Doglas

Saya telah membuat library matrix-slicer untuk memanipulasi item-item matriks. Jadi masalah Anda bisa diselesaikan seperti ini:

var m = new Matrix([
    [1, 2],
    [3, 4],
]);

m.getColumn(1); // => [2, 4]

Mungkin itu akan bermanfaat bagi seseorang. ;-)

1
Alexandr

Anda dapat menggunakan metode array berikut untuk mendapatkan kolom dari array 2D:

Array.prototype.map ()

const array_column = (array, column) => array.map(e => e[column]);

Array.prototype.reduce ()

const array_column = (array, column) => array.reduce((a, c) => {
  a.Push(c[column]);
  return a;
}, []);

Array.prototype.forEach ()

const array_column = (array, column) => {
  const result = [];

  array.forEach(e => {
    result.Push(e[column]);
  });

  return result;
};

Jika array 2D Anda adalah kuadrat (jumlah kolom yang sama untuk setiap baris), Anda dapat menggunakan metode berikut:

Array.prototype.flat ()/.filter ()

const array_column = (array, column) => array.flat().filter((e, i) => i % array.length === column);
1
Grant Miller

function arrayColumn(arr, n) {
  return arr.map(x=> x[n]);
}

var twoDimensionalArray = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

console.log(arrayColumn(twoDimensionalArray, 1));

0
MEHNAZ HUSSAIN