如果我有这样的数组:
var arr = ['one','two','three'];
我可以通过这样做来访问不同的部分:
console.log(arr[1]);
如何按顺序而不是按键访问对象属性?
示例:
var obj = {
'something' : 'awesome',
'evenmore' : 'crazy'
},
jbo = {
'evenmore' : 'crazy',
'something' : 'awesome'
};
我如何获得每个对象的第一个属性 - 来自obj
的“某事”和来自jbo
的“更多” - 没有明确使用属性名称?
现在,你们中的一些人似乎认为我的目标是:
console.log(obj['something']);
情况并非如此,我特意寻找目标指数,就像第一个例子一样 - 如果可能的话。
答案 0 :(得分:99)
“我特意想要定位索引,就像第一个例子一样 - 如果可能的话。”
不,这是不可能的。
最接近的是获取对象键的数组,然后使用:
var keys = Object.keys( obj );
...但不保证按照您定义的顺序返回密钥。所以最终可能看起来像:
keys[ 0 ]; // 'evenmore'
keys[ 1 ]; // 'something'
答案 1 :(得分:41)
我能想到的唯一方法是创建一个方法,使用Object.keys();
为您提供属性。
var obj = {
dog: "woof",
cat: "meow",
key: function(n) {
return this[Object.keys(this)[n]];
}
};
obj.key(1); // "meow"
可以使用Object.prototype;
将其扩展到所有对象,但通常不建议这样做。
相反,请使用函数助手:
var object = {
key: function(n) {
return this[ Object.keys(this)[n] ];
}
};
function key(obj, idx) {
return object.key.call(obj, idx);
}
key({ a: 6 }, 0); // 6
答案 2 :(得分:3)
var obj = {
'key1':'value',
'2':'value',
'key 1':'value'
}
console.log(obj.key1)
console.log(obj['key1'])
console.log(obj['2'])
console.log(obj['key 1'])
// will not work
console.log(obj.2)
编辑:
“我特意想要定位索引,就像第一个例子一样 - 如果可能的话。”
实际上'指数'是关键。如果要存储键的位置,则需要创建自定义对象来处理此问题。
答案 3 :(得分:3)
如果您不想使用Object.values()
,可以使用Object.keys()
方法。
与返回给定对象自己的可枚举属性数组的Object.keys()
方法相反,例如:
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
会打印出以下数组:
[ 'a', 'b', 'c' ]
Object.values()
方法返回给定对象自己的可枚举属性 values
的数组。
因此,如果你有相同的对象,而是使用值,
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.values(object1));
您将获得以下数组:
[ 'somestring', 42, false ]
因此,如果您想访问object1.b
,而是使用索引,则可以使用:
Object.values(object1)[1] === 42
您可以详细了解此方法here。
答案 4 :(得分:1)
我继续为您创建了一个功能
[Timestamp('2020-07-31 12:12:12.123456789')]
['2020-07-31T12:12:12.123456000']
答案 5 :(得分:0)
如果您不确定Object.keys()是否会以正确的顺序返回键,则可以尝试使用此逻辑
var keys = []
var obj = {
'key1' : 'value1',
'key2' : 'value2',
'key3' : 'value3',
}
for (var key in obj){
keys.push(key)
}
console.log(obj[keys[1]])
console.log(obj[keys[2]])
console.log(obj[keys[3]])
答案 6 :(得分:0)
通过jquery你可以这样做:
var arr = $.map(obj,function(value, key) {
return value;
});
alert(obj[0]);
答案 7 :(得分:0)
获取密钥数组,将其反转,然后运行循环
{{1}}
答案 8 :(得分:0)
您可以创建一个填充有您的对象字段的数组,并在该数组上使用索引并通过该索引访问对象属性
propertiesName:['pr1','pr2','pr3']
this.myObject[this.propertiesName[0]]
答案 9 :(得分:0)
当然有可能,但它不像通过索引访问数组那么直接,但实际上仍然有可能,甚至相对简单:事实上,您不必太费劲。此代码示例将展示如何:
var obj = {
'alfa' : 'value of obj the key alfa',
'beta' : 'value of obj the key beta',
'gamma' : 'value of obj the key gamma'
};
var jbo = {
'alfa' : 'value of jbo the key alfa',
'beta' : 'value of jbo the key beta',
'gamma' : 'value of jbo the key gamma'
};
alert ( obj[Object.keys(obj)[1]] );
alert ( jbo[Object.keys(jbo)[1]] );
/* you can even put it into a for loop as follows */
for (i=0;i<3;i++)
{
document.writeln ( "<br>This could be even a piece of HTML: " + obj[Object.keys(obj)[i]] );
document.writeln ( "<br>This could be even a piece of HTML: " + jbo[Object.keys(jbo)[i]] );
}
如您所知,Object.keys() 语句返回您在圆括号中键入的对象的所有可枚举属性(即所有键)的数组。 因此,您唯一需要做的就是在该数组之后指明索引 ,这将返回在该索引处找到的键字面量。 键本身像往常一样被返回该键值的对象“消化”。