让我们考虑一下,我必须使用一些值初始化一个数组 所以我可以通过编写以下代码来实现。
var arr = new Array("a", "b", "c", "d")
console.log(arr)
同样,在使用数组之前,我必须确定数组的长度。 所以我可以通过以下代码来实现。
var arr = new Array(5)
console.log(arr.length)
最后,我有以下问题吗?
编辑: 在这里,不同的值表示存在一些特定的字符串值。
我知道使用数组文字时很简单。但这不是我想要的。
答案 0 :(得分:0)
您可以使用.fill()
。
console.log(new Array(5).fill(2));
// [2, 2, 2, 2, 2]
是否可以使用
new Array()
同时使用数组长度和值初始化数组?
据我所知,这还不可能。
如何使用new Array()初始化单个整数值?
那将是k => new Array(1).fill(k)
。但是,如果必须选择,我将使用k => [k]
。请注意,建议不要在其他情况下使用new Array()
来初始化它的长度。但是即使那样,您也应该确保给它提供一个整数,因为new Array(n)
的行为有点不固定,并且在您希望这样做时不会抛出错误。
实际上,我希望无法使用new Array()
用值初始化数组。最糟糕的是使用new Array(...args)
,当args
为[5]
时,其行为会发生巨大变化。如果要使用值初始化数组,则应坚持使用[]
数组。
Array("")
给出[""]
Array([])
给出[[]]
和Array({})
,[{}]
Array(5)
给出了一个具有5个空插槽的数组Array(2.5)
产生一个Uncaught RangeError: Invalid array length
。Array()
给出了[]
注意:这是Chromium的行为。我没有检查Firefox。
答案 1 :(得分:0)
两个问题的答案均为否。看the docs,Array
函数有两个重载。
使用给定的元素初始化JavaScript数组,除非将单个参数传递给Array构造函数且该参数为数字(请参见下面的arrayLength参数)。
如果传递给Array构造函数的唯一参数是0到232-1(含)之间的整数,则会返回一个新的JavaScript数组,其length属性设置为该数字。
只有这两种可能性,指定数组的大小和值没有重载。
答案 2 :(得分:0)
您可以像这样创建和填充数组:
let a = Array(100).fill(null)
console.log(a)
或者增加您的填充值:
let i=0,a = Array(100).fill(0).flatMap(x=>[x+i++])
console.log(a)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap
答案 3 :(得分:0)
创建数组的方法很少:
1)文字
const a = [1,2,3];
console.log(a);
但是您说您不想使用它。
2)数组构造函数:
const a = new Array(10); //array of length 10
console.log(a);
const b = new Array(1,2,3);
console.log(b); // array with elements 1,2,3
但是你说你不想这么做
3)Array.from
const a = Array.from(new Array(10), (val, ind) => ind); // array of 10 values and map applied to these elements
console.log(a);
在这三种方式中,您拥有Array.fill
方法,该方法只能用静态值调用:
const a = new Array(10);
console.log(a.fill(5)); // array of 10 number elements with value of 5
考虑到您的情况,也许您的解决方案可能是使用Array.from
,并使用您可以提供的map函数作为第二个参数。
您可能会想创建如下功能:
function createMyArray(length, start, end) {
return Array.from(new Array(length), (val, ind) => ind >= start && ind <= end ? ind : undefined);
}
console.log(createMyArray(5, 2, 4));
console.log(createMyArray(5, 1, 3));
console.log(createMyArray(10, 2, 6));
您应该问自己的问题是:我要使用的数据来自何处以及来自何处?否则,这真的太含糊了
答案 4 :(得分:0)
是否可以使用new Array()同时初始化具有数组长度和不同值(不是相似值)的数组?
不,您不能仅使用Array constructor来做到这一点。
另一种方法是这样:
var a = ['a', 'b', 'c', 'd'];
a.length = 10;
console.log(a);
如何使用new Array()初始化单个整数值?
You can't。当您尝试按照规范进行操作时会发生以下情况:
Array(len)
[...]
- 让intLen成为ToUint32(len)。
- 如果intLen≠len,则引发RangeError异常。
- 让setStatus被设置(数组,“ length”,intLen,true)。
- 声明:setStatus不是突然完成。 返回数组。
改用其他方式创建数组(例如[1]
或Array.of(1)
)。
答案 5 :(得分:0)
这是在不使用数组文字的情况下初始化数组的另一种方法,但与此相关。
let arr = [...Array(10)].map((emptyItem, index) => index);
// [0,1,2,3,4,5,6,7,8,9]
我找不到与该表达式的构造方式匹配的文档,因此无法完全解释它。但是它正在使用传播语法将10个空项目传播到一个数组中。