Javascript 是否按索引访问非数字对象属性?
如果我有这样一个数组:Javascript 是否按索引访问非数字对象属性?,javascript,arrays,Javascript,Arrays,如果我有这样一个数组: var arr = ['one','two','three']; 我可以通过以下操作访问不同的部分: console.log(arr[1]); 如何按顺序而不是键访问对象属性 例如: var obj = { 'something' : 'awesome', 'evenmore' : 'crazy' }, jbo = { 'evenmore' : 'crazy', 'something' : 'awesome' }; 如果不明确使用
var arr = ['one','two','three'];
我可以通过以下操作访问不同的部分:
console.log(arr[1]);
如何按顺序而不是键访问对象属性
例如:
var obj = {
'something' : 'awesome',
'evenmore' : 'crazy'
},
jbo = {
'evenmore' : 'crazy',
'something' : 'awesome'
};
如果不明确使用属性名称,如何获取每个对象的第一个属性—obj
中的“something”和jbo
中的“evenmore”
现在,你们中的一些人似乎认为我在追求这样的东西:
console.log(obj['something']);
事实并非如此,我特别关注索引,就像第一个例子一样——如果可能的话
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)
编辑:
“我特别希望以索引为目标,就像第一个例子一样——如果可能的话。”
实际上,“索引”是关键。如果要存储关键点的位置,则需要创建自定义对象来处理此问题
“我特别希望以索引为目标,就像第一个例子一样——如果可能的话。”
不,不可能
最接近的方法是获取对象的键数组,并使用该数组:
var keys = Object.keys( obj );
…但不能保证密钥将按照您定义的顺序返回。所以它最终可能看起来像:
keys[ 0 ]; // 'evenmore'
keys[ 1 ]; // 'something'
我能想到的唯一方法是创建一个方法,使用
Object.keys()为您提供属性代码>
演示:
可以使用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
如果您不确定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]])
通过jquery,您可以执行以下操作:
var arr = $.map(obj,function(value, key) {
return value;
});
alert(obj[0]);
如果不想使用Object.keys()
,可以使用Object.values()
方法
与返回给定对象自身可枚举属性数组的Object.keys()
方法相反,例如:
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
将打印出以下数组:
[ 'a', 'b', 'c' ]
[ 'somestring', 42, false ]
Object.values()
方法返回给定对象自身可枚举属性的数组
因此,如果您有相同的对象,但使用值
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.values(object1));
您将获得以下数组:
[ 'a', 'b', 'c' ]
[ 'somestring', 42, false ]
因此,如果您想访问object1.b
,但使用索引,您可以使用:
Object.values(object1)[1] === 42
您可以阅读有关此方法的更多信息。获取密钥数组,将其反转,然后运行循环
var keys = Object.keys( obj ).reverse();
for(var i = 0; i < keys.length; i++){
var key = keys[i];
var value = obj[key];
//do stuff backwards
}
var-keys=Object.keys(obj.reverse();
对于(变量i=0;i
您可以创建一个填充了对象字段的数组,并在数组上使用索引,通过该索引访问对象属性
propertiesName:['pr1','pr2','pr3']
this.myObject[this.propertiesName[0]]
我继续为你做了一个函数:
Object.prototype.getValueByIndex=函数(索引){
/*
getOwnPropertyNames()接受对象的一个参数,
并返回所有属性的数组。
在本例中,它将返回:[“something”,“evenmore”]。
因此,这个[Object.getOwnPropertyNames(this)[index]];实际上与:
此[propertyName]
*/
返回此[Object.getOwnPropertyNames(this)[index]];
};
设obj={
“某物”:“棒极了”,
“甚至更多”:“疯狂”
};
console.log(obj.getValueByIndex(0));//预期输出:“awesome”
当然这是可能的,但它并不像通过索引访问数组那样直接,但仍然是可能的,实际上甚至是相对简单的:事实上,您不必太费劲。此代码示例将显示如何:
var obj={
'阿尔法':'关键阿尔法的obj值',
'β':'关键β的obj值',
“gamma”:“obj键gamma的值”
};
var jbo={
‘阿尔法’:‘jbo关键阿尔法的价值’,
“beta”:“jbo密钥beta的值”,
“gamma”:“jbo键gamma的值”
};
警报(obj[Object.keys(obj)[1]]);
警报(jbo[Object.keys(jbo)[1]]);
/*您甚至可以将其放入for循环,如下所示*/
对于(i=0;i)“对象数组”是什么意思。数组是一个对象。你是指一个不是数组的对象,还是指一个对象数组。jQuery是如何考虑你的问题的?你唯一的代码示例说明了你已经知道如何处理的部分。给一些代码来说明这个问题如何。@迪恩斯,我认为任何知道jQuery的人都必须了解数组,不要反驳我的问题,它是教科书上的东西。事实上,我想说,知道jQuery和不知道JavaScript的人比不知道JavaScript的人要多(至少知道JavaScript的人应该能够轻松理解jQuery)..关于您的实际问题:不,您不能通过索引访问objec属性。它们不是按顺序排列的。“…我想任何了解jQuery的人都必须了解数组的…”我不敢打赌。@Brogrammer:这个问题与jQuery无关,所以jQuery标记不合适。我知道你可以通过键访问它,这不是我要问的。@Brogrammer:你的问题很模糊,所以这篇文章可能会回答书面问题。这很酷,很有魅力!为什么它不是accepted答案?您可能应该使用返回此[Object.keys(this)[n]]
使其通用。您好,从2016年开始,我们未来的人仍然认为这应该是公认的答案。伟大的解决方案之所以不是公认的答案,是因为在es6之前,Object.keys的顺序是无法保证的。因此,即使该代码在一些JS引擎中工作,也不能保证在所有的引擎中工作。Object.keys()如果您知道对象的内容,则可以可靠地使用。
。此处的更多详细信息:object.keys()方法返回给定对象自身可枚举属性的数组,其顺序与for…in循环提供的顺序相同(区别在于for in循环枚举属性)