[分析]不用循环生成,创建一个长度为100的数组,并且每个元素的值等于它的下标 -- 十种方法实现

/*
    如何不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标
*/

var myArray;

myArray = null;
// new Array(100)  生成的是稀疏数组 返回的不是数组,需要 Array.from转换
/*
    创建空数组
    1.Array.from(new Array(100))
    2.Array.from({length:100}
    3.Array.apply(null,{length:100}
    4.[...Array(100)]
*/
// 1
myArray = Array.from(new Array(100));

myArray = myArray.map(function(item, index) {
    return index;
});

// 2
myArray = Array.apply(null, {
    length: 100
});
// Object.keys(),该方法返回一个数组传入对象,返回属性名
// r如果传递数组,返回索引(下标)
myArray = Object.keys(myArray);

// 3
// 通过Array Iterator
myArray = Array.from(Array(100).keys());

// 4 其实就是 先去掉 undefined 还是 方法1的思想
myArray = Array(100).fill('naive').map(function(v, i) {
    return i;
});

// 5
// new Int8Array(100) 是初始化都为 0 的数组 后面和方法2一样
myArray = Object.keys(new Int8Array(100));
// 上面返回的数组为string,要转成number
myArray = myArray.map(Number);


// 6 赌博法 页面至少要有100个字符
myArray = document.body.innerHTML.substr(0, 100).split('').map(Object.call, Number);

// 7
myArray = ' '.repeat(100).split('').map(Object.call, Number);

// 8 new Array(100).toString() 生成 一串,,,..,, 再分割 成数组
myArray = new Array(100).toString().split(",");

myArray = myArray.map(function(v, i) {
    return i;
});

// 9
myArray = [...Array(100).keys()];

// 10 递归
function reduce(prev, curr) {
    if (curr >= 100) return prev;
    prev.push(curr);
    return reduce(prev, curr + 1);
}

myArray = reduce([], 0);

你可能感兴趣的:([分析]不用循环生成,创建一个长度为100的数组,并且每个元素的值等于它的下标 -- 十种方法实现)