22

我想打印一个键:来自 javascript 对象的值对。我的数组中可以有不同的键,因此不能将其硬编码为 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

我如何打印密钥的值

4

7 回答 7

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

或者,如果您想打印过滤器的所有值

for (var i in filters){
    console.log(i);
    for (var 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]);
    }
});
于 2013-05-10T09:11:52.400 回答
6

这是在寻找一处term房产filters[0]

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

您真正想要做的是使用(在您的示例中为)的作为属性标识符:term"user"

console.log(filters[0][term]);
于 2013-05-10T09:10:37.797 回答
6

数组的 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())
)

于 2013-05-10T09:12:59.807 回答
3

您可以使用数组语法访问该值

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
于 2013-05-10T09:17:12.927 回答
0

例如,假设我们有一个模式对象,其中包含一些字符串。如果我们MODE.toString()只处理对象中的 alpha、beta、gamma,则将返回[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;
    }
};
于 2015-02-04T23:05:26.637 回答
0

如果你想获取对象数组中的所有键,你可以试试这个 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

或者这个如果你想从同一个数组 2dimension 中获取密钥

            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
        }
于 2019-05-02T16:27:51.730 回答
0

如果你想打印键和值,即使是嵌套对象,你也可以试试这个功能:

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 语句之后

于 2020-05-12T17:12:07.787 回答