2013-02-10 77 views
17

好了,所以让我们说,我有我的目标获取JS对象的元素与索引

myobj = {"A":["B"], "B":["C"]} 

,我希望得到的第一个元素出来。正如我希望它返回B其索引A。我该如何做一些沿着myobj[0]的行,并走出B.

+0

你不能,可靠;不保证存储在对象中的属性的顺序。 – 2013-02-10 20:57:20

+1

你能构建一个不含糊的例子吗?哪个'B'在这里很重要? – Eric 2013-02-10 20:59:20

回答

14

JS对象没有定义的顺序,他们是(定义)未排序的键值对集。

如果 “第一次” 你的意思是 “先在字典序”,就可以使用,无论:

var sortedKeys = Object.keys(myobj).sort(); 

,然后使用:

var first = myobj[sortedKeys[0]]; 
+1

呃...词汇是什么意思哈哈? – ChapmIndustries 2013-02-10 20:58:32

+1

@ChapmIndustries词法类似于字母,尽管在小写之前默认采用大写字母,因为它只是查看每个字符的ASCII值。 – Alnitak 2013-02-10 20:59:00

+0

“lexical”应该是“lexicographic” – Barmar 2016-01-29 22:28:39

-2
myobj.A 

------ - 或----------

myobj['A'] 

会让你'B'

+4

但是OP的观点是属性名称'A'不知道。 – 2013-02-10 21:00:11

-2

如果你想要一个特定的顺序,那么你必须使用一个数组,而不是一个对象。对象没有定义的顺序。

例如,使用阵列,则可以这样做:

var myobj = [{"A":["B"]}, {"B": ["C"]}]; 
var firstItem = myobj[0]; 

然后,可以使用MyObj中[0]以获得阵列中的第一个对象。

,或者根据你想要做什么:

var myobj = [{key: "A", val:["B"]}, {key: "B", val:["C"]}]; 
var firstKey = myobj[0].key; // "A" 
var firstValue = myobj[0].val; // "["B"] 
34

我知道这是一个迟到的回答,但我认为这是什么OP要求。

myobj[Object.keys(myobj)[0]]; 
+0

“属性的排序与通过手动循环对象的属性给出的排序相同。”如[链接]所示(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) – 2016-11-22 22:02:27

+1

对于任何想要使用此功能的人,请记住并非全部浏览器支持Object.keys。看到这里 - http://kangax.github.io/compat-table/es5/#test-Object.keys。 MDN还为此提供了一个ployfill - https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys。 – jeanfrg 2017-05-19 10:57:34

0
var myobj = {"A":["B"], "B":["C"]}; 

var keysArray = Object.keys(myobj); 

var valuesArray = Object.keys(myobj).map(function(k) { 

    return String(myobj[k]); 

}); 

var mydata = valuesArray[keysArray.indexOf("A")]; // B 
-1

我希望这将有助于

$.each(myobj, function(index, value) { 

    console.log(myobj[index]); 

    )}; 
+0

您切换了右括号和大括号! – Syraxis 2017-07-12 15:36:19