创建嵌套对象JavaScript的有效方法

时间:2018-10-25 12:41:31

标签: javascript object

是否有比嵌套for方法更有效的方法来创建嵌套对象?

我正在尝试保存25个随机数(1-71),5行x 5列。我将遍历每个项目,以检查ballPicker()函数(尚未实现)是否已选择对象具有的数字。因此,我需要保留如果找到号码的信息。我本可以用5 x 5的数组完成此操作,但是迭代该数组的效率不如对象。

我有一个从1到71(包括1步)的数组。 我在createRandomNumberArray()函数中对数组进行混洗。因此shuffledNumbers数组值不是连续的

let shuffledNumbers = Array.from({length: 71}, (v, i) => i + 1);

function createRandomNumberArray() {     //Fisher - Yates shuffle algorithm
    let randomPosition;
    let temp;
    for (let i = shuffledNumbers.length - 1; i > 0; i--) {
        randomPosition = Math.floor(Math.random() * (i + 1));
        temp = shuffledNumbers[i];
        shuffledNumbers[i] = shuffledNumbers[randomPosition];
        shuffledNumbers[randomPosition] = temp;
    }
}

在createBoards()函数中,我正在创建一个对象(板),该对象包含5个对象(行),它们的索引作为属性名。并且row具有5个对象(单元格),它们的索引再次作为属性名称。单元格只有一个从slicedArray获取属性名称的对象(slicedArray是shuffledNumbers的5项切片,其中包含不重复的随机数(范围从1到71)),并且其值始终为false。

function createBoards() {
    let board = {};
    for (let i = 0; i < 5; i++) {
        let row = {};
        let slicedArray = shuffledNumbers.slice((i * 5), ((i + 1) * 5));
        for (let j = 0; j < 5; j++) {
            let cell = {};
            cell[slicedArray[j]] = false;
            row[j] = cell;
        }
        board[i] = row;
    }
    return board;
}

我想保持这样的结构:

The structure that I am getting with my code (using WebStorm)

Board对象将恰好有5行,而1行恰好有5个项目。将来,我需要迭代这些项以找到我之前分配的随机值。我认为使用对象比使用数组要快。我希望我是正确的。

0 个答案:

没有答案