簡體   English   中英

從數組中提取對象以創建另一個數組

[英]Extract object from array to create another array

我有一個數組,里面有多個對象,如下所示。

[{ DishId: 40, DishName: "Mango", TimeSpan: 98},
 { DishId: 41, DishName: "Banana", TimeSpan: 99},
 { DishId: 42, DishName: "Orange", TimeSpan: 100}]

我想從中提取 DishId 和 DishName 並創建另一個對象數組,如下所示:預期輸出:

 [{ DishId: 40, DishName: "Mango"},
 { DishId: 41, DishName: "Banana"},
 { DishId: 42, DishName: "Orange"}]

我在下面做

allDishes = 
    [{ DishId: 40, DishName: "Mango", TimeSpan: 98},
     { DishId: 41, DishName: "Banana", TimeSpan: 99},
     { DishId: 42, DishName: "Orange", TimeSpan: 100}];

var dishes = {}; 
var dishesArray = []; 
for(i = 0; i < allDishes.length; i++){
  dishes.DishId=  allDishes[i].DishId;
  dishes.DishName =  allDishes[i].DishName;
  dishesArray.push(dishes);
}

它給出了相同的重復對象,因為我想要所有不同的對象,如上例所示

[ { DishId: 42, DishName: 'Orange' },
  { DishId: 42, DishName: 'Orange' },
  { DishId: 42, DishName: 'Orange' }]

您正在重用您的dishes對象,因此在接下來的迭代中您將覆蓋您在之前所做的更改。 您需要做的就是每次在循環中聲明一個新對象,更改其屬性,然后將其推送到數組中。

如果您想了解為什么不能重用同一個對象,請研究“對象在 JavaScript 中作為引用傳遞”,您會發現大量信息。

 const allDishes = [{ // changed DishId: 40, DishName: "Mango", TimeSpan: 98 }, { DishId: 41, DishName: "Banana", TimeSpan: 99 }, { DishId: 42, DishName: "Orange", TimeSpan: 100 } ]; const dishesArray = []; // changed for (let i = 0; i < allDishes.length; i++) { // changed const dish = {} // NEW dish.DishId = allDishes[i].DishId; dish.DishName = allDishes[i].DishName; dishesArray.push(dish); } console.log(dishesArray);

此外,還有另一種方式來完成您想做的事情。 它被稱為 map ,它返回一個基於舊數組的新數組。 此外,您可以使用對象字面量(而不是聲明屬性,您可以創建一個已包含屬性的對象),如下所示:

 const allDishes = [{ DishId: 40, DishName: "Mango", TimeSpan: 98 }, { DishId: 41, DishName: "Banana", TimeSpan: 99 }, { DishId: 42, DishName: "Orange", TimeSpan: 100 } ]; const dishesArray = allDishes.map((dish) => ({ DishId: dish.DishId, DishName: dish.DishName })); console.log(dishesArray);

其他觀察:總是使用constlet來聲明你的變量。 這些在您的代碼中表示為changed注釋

您可以直接使用數組的 map 屬性作為

let dishesArray = allDishes.map(dish => dish = {DishId : dish.DishId, DishName: dish.DishName })

當您在循環外創建dishes ,您將相同的引用重復推送到您的數組上。 在下面的示例中,我在每個循環中重新初始化dishes以生成新的參考。

我的代碼與您的代碼相同,除了我初始化dishes

 allDishes = [{ DishId: 40, DishName: "Mango", TimeSpan: 98}, { DishId: 41, DishName: "Banana", TimeSpan: 99}, { DishId: 42, DishName: "Orange", TimeSpan: 100}]; var dishesArray = []; for(i = 0; i < allDishes.length; i++){ let dishes = {}; // re-initialize this to a new reference dishes.DishId= allDishes[i].DishId; dishes.DishName = allDishes[i].DishName; dishesArray.push(dishes); } console.log(dishesArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM