2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的代碼可能會(huì)執(zhí)行您想要的操作,但概念不正確。newArray是一個(gè)數(shù)組,您將數(shù)組的元素設(shè)置為 indexes 1,2并35生成一個(gè)長(zhǎng)度為 36 的數(shù)組,其中包含許多未定義的元素:
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"
}]
使用forEachor之類的數(shù)組函數(shù)map只會(huì)遍歷您設(shè)置的三個(gè)元素,但for (let i = 0; i < newArray.length; i++)循環(huán)會(huì)導(dǎo)致意外結(jié)果。
如果你想通過一些 id 索引一個(gè)數(shù)組,那么你將需要一個(gè)映射(Record<number, any>在 Typescript 中),在 Javascript 的情況下它只是一個(gè)對(duì)象。無需更改大部分代碼,您只需使用let newArray = {}.
在不使用循環(huán)的情況下,您需要的是array.reduce函數(shù):
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
當(dāng)然,您不能像使用數(shù)組那樣遍歷對(duì)象,但可以使用for ... in和for ... of循環(huán):
for (let index in indexed) {
console.log(indexed[index])
}
for (let element of indexed) {
console.log(element)
}

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
循環(huán)是編程的主要元素之一,它們速度快(for 循環(huán))且易于使用,您沒有理由不想使用它們。特別是如果你想轉(zhuǎn)換數(shù)組,你必須遍歷每個(gè)元素。
但是總有辦法改變你的程序邏輯。您可以將數(shù)據(jù)組織在對(duì)象中,以便稍后通過它們的 ID 訪問它們,就像這樣
// Object data
const data = {
1: { name: "name 1" },
2: { name: "name 2" },
35: { name: "name 35" }
};
// Access entries
console.log(data[35].name);
添加回答
舉報(bào)