簡體   English   中英

如何從數組,JavaScript中列出的字典中打印鍵和值

[英]How to print key and values from dictionaries enlisted in array, javascript

我在使用double for循環從存儲在數組中的字典中打印數據時遇到困難

var residents = [{name: "Pyrus", room: "32"},{name: "Ash Ketchum", room: "22"}];

function people() {
    for (let i = 0; i < residents.length; i++) {
        for (let j in residents[i]) {
            document.write(j + ": " + residents[j] + "<br>");
        }
    }
};

people();

我正在檢索的是:

name: undefined 
room: undefined
name: undefined
room: undefined

我可以打印密鑰,但似乎無法獲取為密鑰定義的值! 我究竟做錯了什么?

成功的標准是使用HTML打印。

您將兩個循環鏈接在一起,因此您的函數需要訪問父索引,然后訪問要引用的屬性。

function people() {
    for (let i = 0; i < residents.length; i++) {
        for (let j in residents[i]) {
            document.write(j + ": " + residents[i][j] + "<br>");
        }
    }
};

為什么不使用forEach()這樣嘗試

 var residents = [{ name: "Pyrus", room: "32" }, { name: "Ash Ketchum", room: "22" }]; function people(residents) { residents.forEach((element) => { for (var key in element) { if (element.hasOwnProperty(key)) { console.log(key + ':' + element[key]); } } }); }; people(residents); 

這是我認為的最簡單方法(使用foreach() ):

 var residents = [{name: "Pyrus", room: "32"},{name: "Ash Ketchum", room: "22"}]; function people() { residents.forEach(function(resident) { document.write(resident.name + ": " + resident.room + "<br>"); }); } people(); 

您可以避免使用某些for循環,並使用forEachObject.entries使代碼更易於閱讀:

 var residents = [{name: "Pyrus", room: "32"},{name: "Ash Ketchum", room: "22"}]; residents.forEach(res => { Object.entries(res).forEach(([key, value]) => { console.log(key + ": " + value ); //subing console.log so it prints here //document.write(key + ": " + value + "<br>"); }) }) 

您需要訪問residents[i][j]因為您首先要迭代居民。

所以你的代碼變成:

document.write(j + ": " + residents[i][j] + "<br>");

看到這個工作的js小提琴

您也可以這樣寫:

function people(){
    residents.forEach(r => {
        for(let j in r){
          document.write(j + ": " + r[j] + "<br>");
      }
    })
}

希望這可以幫助。

使用常規的for循環將類似於以下代碼。 另外,我強烈建議您檢查所有屬性( j )是否都是自己的屬性(具有hasOwnProperty ),否則將在原型鏈中查找。 如果將對象動態添加到陣列中,則可能會出現問題,否則可以繞過此檢查。

 var residents = [{name:"Pyrus",room:"32"},{name: "Ash Ketchum",room:"22"}]; function people() { for (let i = 0; i < residents.length; i++) { for (let j in residents[i]) { if (residents[i].hasOwnProperty(j)) { // <-- check if it is an own property! document.write(j + ": " + residents[i][j] + "<br>"); //first access the object in residents[i], for example {name: "Pyrus",room: "32"}, then to its properties-values with residents[i][j] } } } }; people(); 

暫無
暫無

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

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