【问题标题】:Generate number of pictures randomly a number of times多次随机生成图片数量
【发布时间】:2017-12-20 14:12:37
【问题描述】:

我在一个数组中有 3 个图像,我随机化索引以随机生成它们,但我想生成每个图像 4 次。这样做最有效的方法是什么?

编辑(完整代码):

var image_array = ["image1.png", "image2.png", "image3.png"];

function set_page() 
{
    var table = document.getElementById("grid");

    if(table != null)
    {
        for(var i = 0; i < table.rows.length; i++)
        {
            for(var j = 0; j < table.rows[i].cells.length; j++)
            {
                table.rows[i].cells[j].onclick = function() {
                    click_cell(this);
                }

                //table.rows[i].cells[j].style.backgroundImage = "url('../images/back.png')";

                add_cell_image(table.rows[i].cells[j]);

            }
        }
    }
}

function click_cell(cell)
{

}

function add_cell_image(cell)
{
    for(var i = 0; i <= image_array.length; i++)
    {
        for(var j = 0; j <= image_array.length; j++)
        {
            var index = create_values();

            cell.innerHTML = "<img class='cell_image' align='middle' width='90' height='90' src ='../images/" + image_array[index] + "'/>";
        }
    }
}

function create_values()
{
    return Math.floor(Math.random() * image_array.length);
}

【问题讨论】:

  • 最高效是什么意思?

标签: javascript image random


【解决方案1】:

您可以使用包含所有索引和shuffle 的数组:

<div id="cell"/>

<script>
images = ["img1", "img2", "img3"];

/**
 * Shuffles array in place.
 * @param {Array} a items The array containing the items.
 */
function shuffle(a) {
    var j, x, i;
    for (i = a.length; i; i--) {
        j = Math.floor(Math.random() * i);
        x = a[i - 1];
        a[i - 1] = a[j];
        a[j] = x;
    }
}

function range(number) {
    return Array.apply(null, Array(number)).map(function (_, i) {return i;});
}

function create_image(image_source) {
    var img = document.createElement('img');
    img.src = image_source;
    img.classList.add('cell_image');
    img.align = 'middle';
    img.height = '90';
    img.width = '90';
    return img;
}

function add_cell_image(cell) {
    indices = range(images.length * 4);
    shuffle(indices);
    for (let i = 0; i < indices.length; i++) {
        image_source = "../images/" + images[indices[i] % images.length];
        image = create_image(image_source);
        cell.appendChild(image);
    }
}

cell = document.getElementById('cell')
add_cell_image(cell);
</script>

【讨论】:

  • 我应该在开始时添加完整的代码,但这将如何适用于我现在的做法?
【解决方案2】:

这是一种解决方案。不是最优雅的,但它应该让你开始。

这个想法是创建一个选项数组 - 通过将您的初始图像集连接 X 次。在您最初的问题中,您说您想将每个图像重复 4 次。因此,我们将通过连接您的初始数组 4 次来创建一个选项数组。

然后,我们将从该选项数组中选择一个随机元素,使用.slice,这将从选项数组中删除该选项。我们将继续此操作,直到选项数组为空。

var image_array = [1, 2, 3];
var options = create_options(image_array, 4);

function set_page(table, options) {
  if (table != null) {
    for (var i = 0; i < table.rows.length; i++) {
      for (var j = 0; j < table.rows[i].cells.length; j++) {
        var randIndex = Math.floor(Math.random() * options.length);
        var item = options.splice(randIndex, 1)[0];
        var imgEl = create_image(item);
        table.rows[i].cells[j].appendChild(imgEl);
      }
    }
  }
}

function create_image(image_id) {
  var imgEl = document.createElement('img');
  imgEl.src = "https://via.placeholder.com/350x150?text=" + image_id;
  imgEl.classList.add('cell_image');
  imgEl.height = '90';
  imgEl.width = '90';
  return imgEl;
}

function create_options(image_array, N) {
  var options = [];

  for (var i = 0; i < N; i++) {
    options = options.concat(image_array);
  }

  return options;
}

set_page(document.getElementById('grid'), options);
<table id="grid">
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

【讨论】:

  • 我应该在开始时添加完整的代码,但这将如何适用于我现在的做法?
  • 您是否在询问如何更改现有解决方案以使其发挥作用?还是在寻找有效的解决方案?
  • 上述解决方案不适合您吗?您应该能够用您拥有的字符串替换 image_array 中的数字。例如 - image_array = ["img1", "img2", "img3"];
  • 我将图像添加到表格的每个单元格中。这确实有效,但我正在尝试将其应用于表格。前几天我更新了这个问题的代码,包括 set_page() 函数,我在其中为每个单元格执行循环
  • 如果不是在桌子上,我该怎么做呢?在每个单元格上打印每张图片
猜你喜欢
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
相关资源
最近更新 更多