[英]Javascript - What better way to transform the loop?
我有創建第二個數組的代碼,其中鍵為數據 id。
let array = [
{id: 1, name: 'name 1'},
{id: 2, name: 'name 2'},
{id: 35, name: 'name 35'}
]
let newArray = []
array.forEach(function(data){
newArray[data.id] = data
})
我的代碼工作正常。 我得到我想要的。
大批:
0: {id: 1, name: "name 1"}
1: {id: 2, name: "name 2"}
2: {id: 35, name: "name 35"}
新數組:
1: {id: 1, name: "name 1"}
2: {id: 2, name: "name 2"}
35: {id: 35, name: "name 35"}
但是有沒有比使用循環更好的方法呢?
您的代碼可能會執行您想要的操作,但概念不正確。 newArray
是一個數組,您將數組的元素設置在索引1
、 2
和35
處,從而生成一個長度為 36 的數組,其中包含許多未定義的元素:
console.log(newArray);
// results in
[undefined, {
id: 1,
name: "name 1"
}, {
id: 2,
name: "name 2"
}, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, {
id: 35,
name: "name 35"
}]
使用像forEach
或map
這樣的數組函數只會遍歷您設置的三個元素,但是for (let i = 0; i < newArray.length; i++)
循環會導致意外結果。
如果您想通過某個 id 索引一個數組,那么您將需要一個 map(Typescript 中的Record<number, any>
),如果是 Javascript,它只是一個 ZA8CFDE6331BD59EB2AC96F8911C4B6666Z。 在不更改大部分代碼的情況下,您只需使用let newArray = {}
即可。
如您所願,不使用循環, array.reduce function 就是您要尋找的:
const indexed = array.reduce(
(result, current) => ({
...result, // spread current result
[current.id]: current // add the current element at current.id
}),
{}); // initialize with an empty object
當然,您不能像使用數組一樣迭代 object,但您可以使用for... in
和for... of
循環:
for (let index in indexed) {
console.log(indexed[index])
}
for (let element of indexed) {
console.log(element)
}
循環是編程的主要元素之一,它們速度快(for 循環)且易於使用,您沒有理由不想使用它們。 特別是如果你想轉換數組,你必須遍歷每個元素。
但是總有辦法改變你的程序邏輯。 您可以將數據組織在對象中,以便以后通過它們的 ID 訪問它們,如下所示
// Object data const data = { 1: { name: "name 1" }, 2: { name: "name 2" }, 35: { name: "name 35" } }; // Access entries console.log(data[35].name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.