亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Javascript 中訪問(嵌套的)對象和數組

在 Javascript 中訪問(嵌套的)對象和數組

倚天杖 2023-06-15 17:15:30
我不確定我是否對如何組織數組或如何訪問它有誤解。提議很簡單:擁有一系列汽車品牌和型號并訪問它們進行展示。const carBrands = [  {    Audi: {      models: ["A1", "A2", "A3", "A4"],      unitsAvailable: 378,    }  },  {    BMW: {      models: ["M1", "M2", "M3", "M4"],      unitsAvailable: 413,    },  },  {    Honda: {      models: ["H1", "H2", "H3", "H4"],      unitsAvailable: 226,    },  }];我可以這樣訪問每個模型:  carBrands.forEach((object, i) => {    console.log(object, i)  });這會返回我的對象和索引:奧迪 0 寶馬 1 本田 2我不知道的是如何返回:品牌:奧迪型號:A1、A2、A3、A4 可用單位:378...對于 3 輛車中的每一輛。我知道我必須遍歷數組并為每個循環返回對象鍵/值對。但是我在使用正確的語法時遇到了問題。這是我想弄清楚如何制定的內容:  let modelsToDisplay = [];  carBrands.forEach((object, i) => {    modelsToDisplay.push(<li key={i}>Make/Model/Units of each object</li>);  });感謝您的幫助:)
查看完整描述

3 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

carBrands.flatMap(Object.entries)
    .map(([key, { models, unitsAvailable }]) => `${key} ${models.join(", ")} ${unitsAvailable}`)
    .forEach(v => console.log(v))


查看完整回答
反對 回復 2023-06-15
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

因為您的數組由 dict 對象組成,所以您需要考慮到您需要迭代鍵。在不修改輸入的情況下,您可以使用以下代碼來處理數據結構的內部值:


// For all defined objects

carBrands.forEach((object) => {

  // Determine manufacturers inside the current object (only 1 manufacturer per object in your case)

  var manufacturers = Object.keys(object);

  // For each manufacturer

  manufacturers.forEach((manufacturer) => {

    // Print manufacturer name

    console.log("Manufacturer: " + manufacturer);

    console.log("Models:");

    // For all models

    var models = object[manufacturer].models;

    models.forEach((model) => {

      // print model name

      console.log("  " + model);

    });

    // print available units

    console.log("Available units:");

    console.log("  " + object[manufacturer].unitsAvailable + "\n");

  });

});

輸出:


Manufacturer: Audi

Models:

  A1

  A2

  A3

  A4

Available units:

  378


Manufacturer: BMW

Models:

  M1

  M2

  M3

  M4

Available units:

  413


Manufacturer: Honda

Models:

  H1

  H2

  H3

  H4

Available units:

  226


查看完整回答
反對 回復 2023-06-15
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您遇到的問題是因為您使用的頂級密鑰是唯一的。而不是命名您的鍵Audi,BMW等等。我會使用一個通用鍵make,并將其值設置為您的品牌。這樣,當您執行循環時,您每次都可以請求相同的密鑰:


const carBrands = [

  {

    make: 'Audi',

    models: ["A1", "A2", "A3", "A4"],

    unitsAvailable: 378

  },

  {

    make: 'BMW',

    models: ["M1", "M2", "M3", "M4"],

    unitsAvailable: 413

  },

];


carBrands.forEach(brand => {

    console.log(brand.make);


    brand.models.forEach(model => console.log(model));


});

由于您談到要維護對象中的關系,我鼓勵您考慮如何將此信息存儲在數據庫中,并以此為基礎組織您的組織。


有很多carBrands。每個carBrand都有一個make, unitsAvailable, 并且有很多models.


您不會為每個創建一個新表carBrand,對嗎?您將添加一個新行。因此,按照上面的方式構建它更接近于將其保存在數據庫中的方式,這有利于數據完整性并使其更加靈活。


在這種結構中,通過 make 獲取東西仍然很容易,例如:


let audiModels = carBrands.filter(brand => brand.make == 'Audi').models;


查看完整回答
反對 回復 2023-06-15
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

這里的所有答案都是“正確的”,非常感謝你們!所以沒有一個比另一個更好。

我認為喬納森對我過于復雜的數據結構提出了一個很好的觀點。我將回到更簡單的版本,其中“Audi”等將是一個值,而不是一個鍵。

但我還將按照 Mottek 的建議構建當前結構和訪問數據的示例。

當我深入到項目中時,我將決定哪個是最終版本。

感謝大家的大力幫助!


查看完整回答
反對 回復 2023-06-15
  • 3 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號