Как нажимать элементы массива 1d в массив 9x9 в javascript? [Дубликат]

Вам не разрешено выполнять сетевые операции в потоке пользовательского интерфейса на Android. Вам нужно будет использовать класс AsyncTask для выполнения связанных с сетью операций, таких как отправка запроса API, загрузка изображения с URL-адреса и т. Д. И использование методов обратного вызова AsyncTask, вы можете получить результат inPostExecute menthod, и вы попадете в поток пользовательского интерфейса, и вы может заполнять пользовательский интерфейс данными из веб-службы или что-то в этом роде.

Пример: Предположим, вы хотите загрузить изображение с URL-адреса: https://www.samplewebsite.com/sampleimage.jpg

Решение с использованием AsyncTask: соответственно.

    public class MyDownloader extends AsyncTask
    {
        @Override
        protected void onPreExecute() {
            // Show progress dialog
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            //Populate Ui
            super.onPostExecute(bitmap);
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            // Open URL connection read bitmaps and return form here
            return result;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            // Show progress update
            super.onProgressUpdate(values);
        }


    }
}

Примечание. Не забудьте добавить разрешение Интернета в файл манифеста Android. Он будет работать как шарм. :)

20
задан Whymarrh 17 March 2014 в 22:43
поделиться

11 ответов

Что-то вроде этого?

function listToMatrix(list, elementsPerSubArray) {
    var matrix = [], i, k;

    for (i = 0, k = -1; i < list.length; i++) {
        if (i % elementsPerSubArray === 0) {
            k++;
            matrix[k] = [];
        }

        matrix[k].push(list[i]);
    }

    return matrix;
}

Использование:

var matrix = listToMatrix([1, 2, 3, 4, 4, 5, 6, 7, 8, 9], 3);
// result: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
36
ответ дан jwueller 23 August 2018 в 22:36
поделиться

Здесь есть удивительный репозиторий .

  • api: masfufa.js
  • sample: masfufa.html

В соответствии с этим образцом следующий фрагмент решения проблемы:

  jsdk.getAPI('my');
  var A=[1, 2, 3, 4, 5, 6, 7, 8, 9];
  var MX=myAPI.getInstance('masfufa',{data:A,dim:'3x3'});

, затем:

MX.get[0][0]  // -> 1 (first)
MX.get[2][2] //  ->9 (last)
0
ответ дан Abdennour TOUMI 23 August 2018 в 22:36
поделиться

Как насчет чего-то типа:

var matrixify = function(arr, rows, cols) {
    var matrix = [];
    if (rows * cols === arr.length) {
        for(var i = 0; i < arr.length; i+= cols) {
            matrix.push(arr.slice(i, cols + i));
        }
    }

    return matrix;
};

var a = [0, 1, 2, 3, 4, 5, 6, 7];
matrixify(a, 2, 4);

http://jsfiddle.net/andrewwhitaker/ERAUs/

3
ответ дан Andrew Whitaker 23 August 2018 в 22:36
поделиться

Вы можете использовать функцию Array.prototype.reduce для этого в одной строке.

Стиль ECMAScript 6:

myArr.reduce((rows, key, index) => (index % 3 == 0 ? rows.push([key]) 
  : rows[rows.length-1].push(key)) && rows, []);

«Обычный» JavaScript:

myArr.reduce(function (rows, key, index) { 
  return (index % 3 == 0 ? rows.push([key]) 
    : rows[rows.length-1].push(key)) && rows;
}, []);

Вы можете изменить 3 на то, что вы хотите, чтобы количество столбцов было или, еще лучше, поместило его в функцию многократного использования:

Стиль ECMAScript 6:

const toMatrix = (arr, width) => 
    arr.reduce((rows, key, index) => (index % width == 0 ? rows.push([key]) 
      : rows[rows.length-1].push(key)) && rows, []);

«Обычный» JavaScript:

function toMatrix(arr, width) {
  return arr.reduce(function (rows, key, index) { 
    return (index % width == 0 ? rows.push([key]) 
      : rows[rows.length-1].push(key)) && rows;
  }, []);
}
15
ответ дан Banciur 23 August 2018 в 22:36
поделиться
function matrixify( source, count )
{
    var matrixified = [];
    var tmp;
    // iterate through the source array
    for( var i = 0; i < source.length; i++ )
    {
        // use modulous to make sure you have the correct length.
        if( i % count == 0 )
        {
            // if tmp exists, push it to the return array
            if( tmp && tmp.length ) matrixified.push(tmp);
            // reset the temporary array
            tmp = [];
        }
        // add the current source value to the temp array.
        tmp.push(source[i])
    }
    // return the result
    return matrixified;
}

Если вы хотите фактически заменить внутренние значения массива, я считаю, вы можете вызвать следующее:

source.splice(0, source.length, matrixify(source,3));
2
ответ дан cwallenpoole 23 August 2018 в 22:36
поделиться
function matrixify(array, n, m) {
    var result = [];
    for (var i = 0; i < n; i++) {
        result[i] = array.splice(0, m);
    }
    return result;
}
a = matrixify(a, 3, 3);
0
ответ дан Jannic Beck 23 August 2018 в 22:36
поделиться

Использование короткого ответа:

const gridArray=(a,b)=>{const d=[];return a.forEach((e,f)=>{const 
h=Math.floor(f/b);d[h]=d[h]||[],d[h][f%b]=a[f]}),d};

Где:

a: is the array
b: is the number of columns

Длинный ответ вы можете прочитать статью:

Как конвертировать массив длиной 'n' для сетки сетки

0
ответ дан Mustafa Dwekat 23 August 2018 в 22:36
поделиться
function changeDimension(arr, size) {  
  var arrLen = arr.length;
  var newArr = [];
  var count=0;
  var tempArr = [];

  for(var i=0; i<arrLen; i++) {
    count++;
    tempArr.push(arr[i]);

    if (count == size || i == arrLen-1) {
      newArr.push(tempArr);
      tempArr = [];
      count = 0;
    }    
  }  
  return newArr;
}

changeDimension([0, 1, 2, 3, 4, 5], 4);
0
ответ дан Sagar Mishra 23 August 2018 в 22:36
поделиться
function chunkArrToMultiDimArr(arr, size) {

    var newArray = [];

    while(arr.length > 0)
    {
      newArray.push(arr.slice(0, size));
      arr = arr.slice(size);
    }

  return newArray;
}

//example - call function
chunkArrToMultiDimArr(["a", "b", "c", "d"], 2);
1
ответ дан SayedRakib 23 August 2018 в 22:36
поделиться

Просто используйте два для циклов:

var rowNum = 3;
var colNum = 3;
var k = 0;
var dest = new Array(rowNum);

for (i=0; i<rowNum; ++i) {
  var tmp = new Array(colNum);
  for (j=0; j<colNum; ++j) {
    tmp[j] = src[k];
    k++;
  }
  dest[i] = tmp;
}
2
ответ дан Vincent Mimoun-Prat 23 August 2018 в 22:36
поделиться

Этот код вообще не нужно беспокоиться о размере и массиве, работает универсально

  function TwoDimensional(arr, size) 
    {
      var res = []; 
      for(var i=0;i < arr.length;i = i+size)
      res.push(arr.slice(i,i+size));
      return res;
    }
  1. Определение пустого массива.
  2. Итерации в соответствии с размером, чтобы мы получите указанный chunk.Th поэтому я увеличиваю i с размером, потому что размер может быть 2,3,4,5,6 ......
  3. Здесь, сначала я нарезаю от i до (i + size), а затем я нажимаю его на пустой массив res.
  4. Верните двумерный массив.
2
ответ дан Zippy 23 August 2018 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: