所以,我是編程新手,我在這里遇到了一些麻煩。看,我想寫一個小范圍的函式,這樣range(a,b)會回傳一個陣列,其中包含 a 和 b 之間的所有數字。所以我用谷歌搜索并找到了這個:
const range = (min, max) => [...Array(max - min 1).keys()].map(i => i min);
這作業得很好,但我在理解它時遇到了一些麻煩,尤其是對于.keys()零件。我以為.keys()是一個 Object 函式,它將回傳一個物件的鍵/值對的鍵,但在我看來,它已在陣列中使用。
我在這里理解錯了什么?
感謝幫助!
uj5u.com熱心網友回復:
陣列也有一個keys方法,它是這個range函式正常作業的核心。
這是它的作業原理:
- 它創建一個適當長度 ( )的空(稀疏)陣列
Array(max - min 1)。 - 它獲取該陣列 ( )的有效索引的迭代器
.keys()。陣列中的有效索引是陣列0長度減去一的數字。(從技術上講,在規范術語中,陣列的索引是字串屬性名稱,如"0","1"等,但keys迭代器回傳數字,因為我們通常使用數字來索引陣列,而這是提供的更有用的值。) - 它傳播從該迭代器中的元件入出的陣列(
[...])。 - 它通過映射來自 #3 的陣列中的每個值來創建一個新陣列,并將
min值添加到它們 (.map(i => i min)) 中。
請注意,這會創建多個中間陣列和其他物件。這不太重要,但可以更有效地完成。例如,Array.from如Nina 所示,甚至只是一個簡單的回圈:
const range = (min, max) => {
const result = [];
for (let n = min; n < max; n) {
result.push(n); // Or: `result[result.length] = n;` if you want to
// avoid the function call
}
return result;
};
顯示代碼片段
const range = (min, max) => {
const result = [];
for (let n = min; n < max; n) {
result.push(n);
}
return result;
};
console.log(range(5, 10));
不過,這看起來并不那么酷。:-D
但是,range除非我確定那是我一直需要的最終產品,否則我可能根本不會回傳陣列。相反,我會讓它回傳一個迭代器:
const range = function*(min, max) {
for (let n = min; n < max; n) {
yield n;
}
};
for (const value of range(0, 10)) {
console.log(value);
}
.as-console-wrapper {
max-height: 100% !important;
}
Array.from如果需要陣列,您可以隨時將其展開到陣列中(或將其與 一起使用)。
uj5u.com熱心網友回復:
陣列也有keys并回傳一個用于回傳鍵的迭代器。這需要擴展到一個陣列或使用一個接受可迭代物件并回傳一個陣列的函式。
為此目的Array.from而制作 - 這也具有映射功能。
您可以Array.from直接使用具有length屬性和映射函式的物件,而不是構建多個陣列。
const range = (min, max) => Array.from(
{ length: max - min 1 },
(_, i) => i min
);
console.log(...range(7, 9));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/380694.html
標籤:javascript 数组 目的 范围 钥匙
上一篇:React如何呼叫API并在物件陣列中顯示陣列PokeAPI
下一篇:如何復制整數?[復制]
