[英]Why is Array.from returning [object HTMLParagraphElement] not the content within the paragraphs?
[英]Why Do I need to pass an Object to Array.from?
我不明白为什么以下提供了不同的结果,在第二个中我看到人们使用下划线 (_, i),但我不确定它的作用。
let test1 = Array.from(5, (v,i) => i); //empty array;
let test2 = Array.from({length:5}, (v,i) => i); // [0,1,2,3,4]
我不明白为什么我需要通过 object 来获取由前 n 个数字填充的数组。 有人可以解释一下吗?
您基本上遵循以下方法
Array.from(arrayLike, (currentValue, index) => { ... } )
所以arrayLike
变量需要是一个字符串 map... 或者它应该是一个 object 确定数组的长度(就像你的情况一样)。 因此,在您的情况下,数组的大小由arrayLike
object 确定。 每次箭头 function 运行并且索引从 0 变为arrayLike.length - 1
时, currentvalue
都是undefined
的。
让我们先看看 Array.from() 方法的签名。
Array.from(arrayLike, mapFn)
因此,第一个参数应该是一个 arrayLike object(一个 object,它的长度属性是非负整数)。 您也可以传递数组、字符串等。
第二个参数是 map function,它将第一个参数 (arrayLike) 的元素映射到回调 function 的返回值。
此 map function 采用带有以下签名的回调 function。
callback(value, index)
map function 创建一个新数组,其中填充了调用回调Array.from
(v, i) => i
对 Array 的第一个参数中的每个元素的结果。
现在,让我们看第一个案例,
let test1 = Array.from(5, (v,i) => i);
这里, (v, i) => i
是 map function。 v
是 arrayLike object 的元素, i
是该元素的索引。 返回索引i
。
但是, 5
既不是数组也不是 arrayLike object 并且5
的长度属性是undefined
。 因此,map function 不映射(零)元素并生成一个空数组。 考虑以下实现。
function mapFn (arrayLike, callback) {
let result = [];
for (let i = 0; i < arrayLike.length; i++) {
let mappedValue = callback(arrayLike[i], i);
result.push(mappedValue);
}
return result;
}
如果将5
传递给 mapFn function,则for
循环迭代0
次并且mapFn
返回一个空数组。
在第二个例子的情况下,
let test2 = Array.from({length:5}, (v,i) => i); // [0,1,2,3,4]
{length: 5}
是一个数组,如 object。 map function 生成一个数组,其中包含回调 function 的返回值。 回调 function 返回索引。 因此, [0,1,2,3,4]
。
在回调 function 中,仅使用i
参数并从 function 返回。 不使用v
参数。 但是,它需要在那里才能访问第二个参数i
。 因此, (_, i)
与(v, i)
相同。 您可以使用任何有效的变量名称来命名参数。
因为它期望和 arrayLike object 和 arrays 一样有一个长度属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.