在javascript中基于一个原始数组创建新数组并按其排序



我正在写javascript,试图只做一些简单的任务。

var series = ["A","0","0","B","0","C","0","0","D","0"];
var off = 1;
var built = 1;
var position = 1;
var masterSeries = [];
var slot = 1;
console.log(series);
function createMaster() {
    for (var i = 0; i <= series.length - 1; ++i) {
        masterSeries[i] = ["Mode" + off];
        //console.log("Creating Internal Array #" + off);
        off++
    }
    off = 1;
    //since we already have first series we just assign it here
    masterSeries[0] = series;
    return masterSeries;
}
function buildAltSeriesNoNull() {
    for (var i = 1; i <= series.length - 1; i++) {
        slot++;
        console.log("Checking Slot: " + slot); 
        if (series[i] != "0") {
            console.log("Found Non Null, building: " + built);
            //code to mutate the original array into new arrays goes here
            var temp = series;
            var back = temp.slice(i, series.length);
            var front = temp.slice(0,i);
            var newline = back.concat(front);
            masterSeries[position] = newline;
            position++;
			console.log("Added to Master Series Mini Array:" + position);
            built++;
            
        } else {
            console.log("Skipping Slot: " + slot);
            
        }
        off++;
        //masterSeries[i] = ["Love" + numOffset];  //set the mode
    }
console.log(masterSeries);
}
console.log(createMaster()); //Create the MasterSeries Display the Banks
console.log("Memory banks have been created, and we have a valid series of numbers to work with!");
console.log('n');
console.log(buildAltSeriesNoNull());

  1. 我有一个包含10个索引的硬编码数组,包含可能的字母
  2. 将有随机数量的字母填充10个槽,无论第一个索引是空还是不空
例如

A00B0C00D0

ABC00D00EF

0 a0b0c0d0e

  • 0应该被当作null(马上就会派上用场了)
  • 首先,我想让程序遍历第一个索引和

    之后的每个索引

    。确定它是空的还是有效的字母

    B。如果为空,则跳到下一个索引

    C。如果它有一个有效的字母,那么它将创建一个新数组,并将原始数组"还原"为如下所示的自定义排序数组。(使用上面的原始数组示例之一)

  • 原始数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> A00B0C00D0

    程序检查索引2,它为空,移动到下一个,检查索引3为空,移动到下一个。索引4的值是" B "现在程序创建了一个名为array2nditerate的新数组数组现在看起来像这样

    第二个数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> B0C00D0A00

    第三阵列

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> C00D0A00B0

    第四数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> D0A00B0C00

    它根据每个字母在原数组中的位置为其创建一个新数组

    所以一旦它为每个有值的槽创建了所有唯一的排序数组。然后,我需要它做整个相同的过程,但这一次在原始数组的位置,只有空值…例如,它看起来像这样。

    原始数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> A00B0C00D0

    第一个空数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> 00 b0c00d0a

    第二个空数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    值——> 0 b0c00d0a0

    第三个空数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    值——> 0 c00d0a00b

    第四个空数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    价值——> 00 d0a00b0c

    第五个空数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    值——> 0 d0a00b0c0

    第六个空数组

    指数——> [0,1,2,3,4,5,6,7,8,9)

    值——> 0 a00b0c00d

    如果你注意到它创建了4个非空数组自定义排序,因为在10个可能的索引位置的数组中只有4个字母。它创建了6个非空数组因为10个位置-4个非空数组等于6个空数组

    我不确定哪种方法更快更好。使用一个for循环迭代并将其排序为一堆空数组和一堆非空数组,或者编写两个单独的函数来迭代

    1. 通过只查找非空索引并按此方式排序
    2. 查找空索引并排序

    这是基于保持原始数组的思想,并且只适用于两个抽象,即找到的字母和零的偏移量。

    我认为,一个简单的迭代应该把0和字母索引排序出来。

    this.array.forEach(function (a, i) {
        a === '0' ? that.indexZero.push(i) : that.indexLetter.push(i);
    });
    

    工作的例子:

    function ClassWithoutName(data) {
        var that = this;
        this.array = data.split(''),
        this.indexLetter = [],
        this.indexZero = [];
        this.array.forEach(function (a, i) {
            a === '0' ? that.indexZero.push(i) : that.indexLetter.push(i);
        });
    }
    ClassWithoutName.prototype = {
        constructor: ClassWithoutName,
        getItem: function (index) {
            return this.array[index % this.array.length];
        },
        getArray: function (offset) {
            offset = offset || 0;
            return this.array.map(function (_, i, o) {
                return o[(i + offset) % o.length];
            });
        }
    };
    var instanceWithoutName = new ClassWithoutName('A00B0C00D0');
    console.log('data: ' + instanceWithoutName.getArray().join(''));
    console.log('letters:');
    instanceWithoutName.indexLetter.forEach(function (a, i) {
        console.log(i + ': offset: ' + a + ' ' + instanceWithoutName.getArray(a).join(''));
    });
    console.log('zeros:');
    instanceWithoutName.indexZero.forEach(function (a, i) {
        console.log(i + ': offset: ' + a + ' ' + instanceWithoutName.getArray(a).join(''));
    });
    console.log('special selected item, here 2nd abstraction of letter element 3:');
    console.log(instanceWithoutName.getItem(instanceWithoutName.indexLetter[2] + 3));
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    相关内容

    • 没有找到相关文章

    最新更新