簡體   English   中英

打印對象的鍵和值

[英]Printing object's keys and values

我想從 javascript 對象打印一個 key: value 對。 我的數組中可以有不同的鍵,因此不能將其硬編碼為 object[0].key1

var filters = [{"user":"abc"},{"application":"xyz"}];
console.log(Object.keys(filters[0])[0]); // prints user
var term = (Object.keys(filters[0])[0]);
console.log(filters[0].term); // prints undefined

我如何打印密鑰的值

for (key in filters[0]){
    console.log( key + ": " + filters[0][key]);
}

或者如果你想打印過濾器的所有值

for (i in filters){
    console.log(i);
    for (key in filters[i]){
        console.log( key + ": " + filters[i][key]);
    }
}

關於@mplungjan 的評論

filters.forEach(function(obj, index){
    console.log(index);
    for (var key in obj){
        console.log(key, obj[key]);
    }
});

這是在filters[0]上尋找term屬性:

console.log(filters[0].term);

您真正想要做的是使用term(在您的示例中為"user" )作為屬性標識符:

console.log(filters[0][term]);

數組的 for 循環和對象的 for..in 迭代:

 var filters = [{ "user": "abc"}, {"application": "xyz"}]; for (var i = 0; i < filters.length; i++) { // the plainest of array loops var obj = filters[i]; // for..in object iteration will set the key for each pair // and the value is in obj[key] for (var key in obj) { console.log(key, obj[key]) } }

ES6

 [{ "user": "abc"}, {"application": "xyz"}].forEach( obj => console.log(Object.entries(obj).flat()) )

您可以使用數組語法訪問該值

var filters = [{"user":"abc"},{"application":"xyz"}];
console.log(Object.keys(filters[0])[0]); // prints user
var term = (Object.keys(filters[0])[0]);
console.log(filters[0][term]);// prints abc

假設我們有一個模式對象,其中包含一些字符串。 如果我們在對象中只使用 alpha、beta、gamma 來執行MODE.toString() ,那么將返回的是[object Object]這沒有用。

相反,假設我們想要得到一些不錯的東西,比如Normal, Sepia, Psychedelic 要做到這一點,我們可以向我們的對象添加一個toString: function(){...}來做到這一點。 然而,一個問題是,如果我們循環遍歷對象中的所有內容,它自己的函數也將被打印,因此我們需要檢查它。 在示例中,我將專門檢查toString ,但是,可以使用其他檢查,例如... && typeof MODE[key] == "string"

以下是一些示例代碼,調用MODE.toString(); 將返回Normal, Sepia, Psychedelic

var MODE = {alpha:"Normal", beta:"Sepia", gamma:"Psychedelic",
    toString: function() {
        var r = "";
        for (var key in MODE) {
            if (MODE.hasOwnProperty(key) && key != "toString") {
                r+= r !== "" ? ", ":"";
                r+= MODE[key];
            }
        }
        return r;
    }
};

如果你想獲取對象數組中的所有鍵,你可以試試這個 mybe

      let temp = []
        let keys = []
        let result = []
        for (let i = 0; i < data.length; i++) {
          temp = Object.keys(data[i])
          for (let j = 0; j < temp.length; j++) {
            if(!keys.includes(temp[j])){
              keys.push(temp[j])
            }

          }
          temp = []
        }

        for (let i = 0; i < data.length; i++) {
            for (let j = 0; j < keys.length; j++) {
              if(data[i][keys[j]] == undefined){
                data[i][keys[j]] = ""
              }

            }

        }
        return data

或者這個,如果你想從同一個二維數組中獲取密鑰

            function convertObj(arr){
            let arrResult = []
            for (let i = 1; i < arr.length; i++) {
            let obj={}
            for (let j = 0; j < arr[0].length; j++) {
                obj[arr[0][j]] = arr[i][j]

            }
            arrResult.push(obj)  

            }
        return arrResult
        }

如果你想打印鍵和值,即使是嵌套對象,你也可以試試這個函數:

function printObjectData(obj, n = 0){
    let i = 0;
    var properties = Object.keys(obj);

    let tab = "";
    for(i = 0; i < n; i++)
        tab += "\t";

    for(i = 0; i < properties.length; i++){                  
        if(typeof(obj[properties[i]]) == "object"){
            console.log(tab + properties[i] + ":");
            printObjectData(obj[properties[i]], n + 1);
        }
        else
            console.log(tab + properties[i] + " : " + obj[properties[i]]);                    
    }
}

printObjectData(filters);

解決方案如下所示:

0:
    user : abc 
1:
    application : xyz 

如果你想刪除 0: 和 1: 然后簡單地刪除

console.log(tab + properties[i] + ":"); 

在 if 語句之后

暫無
暫無

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

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