如何获得一个键/值JavaScript对象的键

如果我有一个JS对象:

var foo = { 'bar' : 'baz' }

如果我知道foo有基本的键/值结构,但不知道键的名称,我怎么能得到它?for ... in吗?$.each()吗?

770908 次浏览

嗯,$.each是一个库结构,而for ... in是原生js,这应该更好

除了for (var key in foo),我没有看到任何其他东西。

除了for ... in,没有其他方法。如果你不想使用它(可能是因为必须在每次迭代中测试hasOwnProperty是非常低效的?),那么使用不同的构造,例如kvp的数组:

[{ key: 'key', value: 'value'}, ...]

如果你想获得所有的键,ECMAScript 5引入了Object.keys。这只有较新的浏览器支持,但争取民主变革运动的文档提供了另一种实现(也使用for...in btw):

if(!Object.keys) Object.keys = function(o){
if (o !== Object(o))
throw new TypeError('Object.keys called on non-object');
var ret=[],p;
for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
return ret;
}

当然,如果你同时需要键和值,那么for...in是唯一合理的解决方案。

既然你提到了$.each(),这里有一个方便的方法,可以在jQuery 1.6+中工作:

var foo = { key1: 'bar', key2: 'baz' };


// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
return key;
});

最简单的方法是使用Underscore.js:

< p > _.keys(对象)

.返回对象属性的所有名称 < p > _。键({一:1,二:2,三:3}); =比;(“人,“two",“three"] < / p >

是的,你需要一个额外的库,但它是如此简单!

你可以用for循环在对象内部迭代:

for(var i in foo){
alert(i); // alerts key
alert(foo[i]); //alerts key's value
}

Object.keys(foo)
.forEach(function eachKey(key) {
alert(key); // alerts key
alert(foo[key]); // alerts value
});

您可以单独访问每个键,而无需迭代,如下所示:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second

我也遇到过同样的问题,这个方法很有效

//example of an Object
var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};


//How to access a single key or value
var key = Object.keys(person)[0];
var value = person[key];

给定你的对象:

var foo = { 'bar' : 'baz' }

要获得bar,使用:

Object.keys(foo)[0]

要获得baz,使用:

foo[Object.keys(foo)[0]]

假设只有一个对象

用于在javascript中访问对象或地图中的键的每个循环

for(key in foo){
console.log(key);//for key name in your case it will be bar
console.log(foo[key]);// for key value in your case it will be baz
}

注意:你也可以使用

种(foo);

它会给你这样的结果 输出:< / p >

(酒吧);

< >强种() object .keys()方法返回给定对象自身可枚举属性的数组,其顺序与for…In循环(不同之处在于for-in循环也枚举原型链中的属性)

var arr1 = Object.keys(obj);

< >强Object.values () object .values()方法返回给定对象自身可枚举属性值的数组,其顺序与for…In循环(不同之处在于for-in循环也枚举原型链中的属性)

var arr2 = Object.values(obj);

欲了解更多,请访问在这里

要显示为字符串,只需使用:

console.log("they are: " + JSON.stringify(foo));
// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

参考MDN

这是最简单易行的方法。我们就是这么做的。

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     

console.log("key = ", key) // bar
console.log("value = ", value) // baz
Object.keys()是javascript方法,在对象上使用时返回一个键数组
Object.keys(obj) // ['bar']

现在您可以迭代对象,并可以访问如下值-

Object.keys(obj).forEach( function(key) {
console.log(obj[key]) // baz
})

你的一个衬套:

const OBJECT = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
};


const value = 'value2';


const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];


window.console.log(key); // = key2

你可以使用Object。按键功能,获得按键如下:

const tempObjects={foo:"bar"}


Object.keys(tempObjects).forEach(obj=>{
console.log("Key->"+obj+ "value->"+tempObjects[obj]);
});

获取对象的键/值的最佳方法。

let obj = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
}
Object.keys(obj).map(function(k){
console.log("key with value: "+k +" = "+obj[k])
    

})

如果你正在使用AWS CloudFront功能,那么这将为你工作。

function handler(event) {
var response = event.response;
var headers = response.headers;
if("x-amz-meta-csp-hash" in headers){
hash=headers["x-amz-meta-csp-hash"].value;
console.log('hash is ' + hash);
}
}

易读且简单的解决方案:

const object1 = {
first: 'I am first',
second: 'I am second'
};


for (const [key, value] of Object.entries(object1)) {
console.log(`${key}: ${value}`);
}


// expected output:
// "first: I am first"
// "second: I am second"