Javascript - 有什么更好的方法来转换循环?

我有创建第二个数组的代码,其中键作为数据 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"}

但是有没有比使用循环更好的方法呢?


猛跑小猪
浏览 78回答 2
2回答

SMILET

您的代码可能会执行您想要的操作,但概念不正确。newArray是一个数组,您将数组的元素设置为 indexes 1,2并35生成一个长度为 36 的数组,其中包含许多未定义的元素:console.log(newArray);// results in&nbsp;[undefined, {&nbsp; id: 1,&nbsp; name: "name 1"}, {&nbsp; id: 2,&nbsp; 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, {&nbsp; id: 35,&nbsp; name: "name 35"}]使用forEachor之类的数组函数map只会遍历您设置的三个元素,但for (let i = 0; i < newArray.length; i++)循环会导致意外结果。如果你想通过一些 id 索引一个数组,那么你将需要一个映射(Record<number, any>在 Typescript 中),在 Javascript 的情况下它只是一个对象。无需更改大部分代码,您只需使用let newArray = {}.在不使用循环的情况下,您需要的是array.reduce函数:const indexed = array.reduce(&nbsp; (result, current) => ({&nbsp; &nbsp; ...result,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// spread current result&nbsp; &nbsp; [current.id]: current&nbsp; // add the current element at current.id&nbsp; }),&nbsp; {});&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// initialize with an empty object当然,您不能像使用数组那样遍历对象,但可以使用for ... in和for ... of循环:for (let index in indexed) {&nbsp; console.log(indexed[index])}for (let element of indexed) {&nbsp; console.log(element)}

GCT1015

循环是编程的主要元素之一,它们速度快(for 循环)且易于使用,您没有理由不想使用它们。特别是如果你想转换数组,你必须遍历每个元素。但是总有办法改变你的程序逻辑。您可以将数据组织在对象中,以便稍后通过它们的 ID 访问它们,就像这样// Object dataconst data = {&nbsp; 1: { name: "name 1" },&nbsp; 2: { name: "name 2" },&nbsp; 35: { name: "name 35" }};// Access entriesconsole.log(data[35].name);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript