Подтвердить что ты не робот

Получить столбец из двумерного массива

Как я могу получить столбец из 2-мерного массива, а не одной записи? Я делаю это потому, что хочу найти строку только в одном из столбцов, поэтому, если есть другой способ сделать это, пожалуйста, сообщите мне.

Я использую массив, определенный таким образом:

var array=[];

В конце размер этого массива составляет 20 (столбец) x3 (строки), и мне нужно прочитать первую строку и проверить наличие в ней какой-либо фразы.

4b9b3361

Ответ 1

Вам нужно пройти через каждый элемент в 2d-массиве и получить n-й столбец.

    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

Ответ 2

С помощью функции сопоставить столбцы легко.

// 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]; });

Зачем вообще беспокоиться об этом? Просто filter матрицу, чтобы найти интересующие строки.

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

К сожалению, фильтр и карта не доступны на IE9 и ниже. Документация MDN обеспечивает реализацию для браузеров без встроенной поддержки.

Ответ 3

Используйте Array.prototype.map() с помощью функции arrow:

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

Ответ 4

Эта функция работает с массивами и объектами. obs: он работает как функция array_column php. Это означает, что необязательный третий параметр может быть передан для определения того, какой столбец будет соответствовать индексам возврата.

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

Это условная версия:

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

удобство и простота использования:

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

Вывод:

/*
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 }
*/

Ответ 5

Я создал библиотечный матричный слайсер для работы с матричными элементами. Таким образом, ваша проблема может быть решена так:

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

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

Возможно это кому-нибудь пригодится. ;-)

Ответ 6

Вы можете использовать следующие методы массива для получения столбца из 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;
};

Если ваш 2D-массив представляет собой квадрат (такое же количество столбцов для каждой строки), вы можете использовать следующий метод:

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

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

Ответ 7

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

Ответ 8

Массивы действительно не имеют четко определенных строк и столбцов, но по существу вы можете получить доступ только к элементу в массиве, что означает, что вы можете получить любой из массивов, содержащихся во внешнем массиве, или элемент в одном из этих массивов, Нет причин, по которым вы не можете просто создать новый массив и прочитать все значения в, но если вы просто ищете значение, которое вы также можете сделать, переходя через:

var column = 2;
for (var i = 0; i < array.length; i++) {
    if (matchesSearch(array[i][column])) {
        // Do what you want with a matched result, perhaps store it in a result array.
    }
}

Очевидно, вам нужно реализовать matchesSearch, чтобы он возвращал значение true, если значение соответствует тому, что вы ищете.