[英]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);
其他觀察:總是使用const
或let
來聲明你的變量。 這些在您的代碼中表示為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.