从索引获取对象的值

时间:2015-12-13 21:59:29

标签: javascript

我有一个这样的对象:

{
    " Fairfield, D. H." : [0, 0, 3, 3, 2, 2],
    " Mish, W. H."      : [3, 0, 3, 3, 2, 2],
    " Baker, D. N."     : [0, 0, 0, 0, 2, 2],
    " Curtis, S. A."    : [0, 0, 3, 0, 2, 2],
    "Ocuna, M. H."      : [0, 0, 0, 0, 0, 0],
    " Ogilvie, K. W."   : [0, 0, 0, 0, 2, 0]
}

所以在我的对象中(例如第一行)key" Fairfield, D. H."value[0, 0, 3, 3, 2, 2]

要在我的代码中调用第三行,我必须使用其密钥,如下所示:

console.log(myObj[" Baker, D. N."]);

但我不想通过它的键调用该行,我想通过它的索引来调用它,例如:

console.log(myObj[2]);

然后在我的示例中获取该行的密钥为" Baker, D. N."

我该怎么做?

编辑1:

我无法使用数组,因为我通过json调用获取该对象,因此我必须按原样处理它。

该对象的含义是键是作者名称,值是其他作者与其他作者的关系数。

例如,作者" Fairfield, D. H."与他自己有0个关系,0与“Mish, W. H."3与[{1}}有关的关系... ...

我想要做的是创建一个包含作者姓名的数组和另一个包含这些作者之间关系的数组,所以最后它必须看起来像这样:

" Baker, D. N."

在我的代码中,我有类似的东西:

nodes = [
    " Fairfield, D. H.",
        " Mish, W. H.",
        " Baker, D. N.",
        " Curtis, S. A.",
        "Ocuna, M. H.",
        " Ogilvie, K. W."
  ]

edges =  [
    ["Fairfield, D. H.", " Baker, D. N.", 3],
    ["Fairfield, D. H.", " Curtis, S. A.", 3],
    ["Fairfield, D. H.", "Ocuna, M. H.", 2],
    ["Fairfield, D. H.", " Ogilvie, K. W.", 2],
    [" Mish, W. H.", "Fairfield, D. H.", 3],
    [" Mish, W. H.", " Baker, D. N.", 3],
    [" Mish, W. H.", " Curtis, S. A.", 3],
    [" Mish, W. H.", "Ocuna, M. H.", 2],
    .........
  ]
在控制台中显示如下:

  $http.get('data/graphAuteur.JSON').then(function(response) {

    var nodes = [];
    var edges = [];

    angular.forEach(response.data, function(authorRelations, authorName) {
        nodes.push(authorName.trim());

            angular.forEach(authorRelations, function(relation, relationIndex) {
                if (relation != 0) {
                    edges.push([authorName.trim(),relationIndex,relation]);
                }
            });


    });
    console.log(edges);
}

所以我需要的是将edges = [ ["Fairfield, D. H.", 2, 3], ["Fairfield, D. H.", 3, 3], ["Fairfield, D. H.", 4, 2], ["Fairfield, D. H.", 5, 2], [" Mish, W. H.", 0, 3], [" Mish, W. H.", 2, 3], [" Mish, W. H.", 3, 3], [" Mish, W. H.",4, 2], ......... ] 行中的relationIndex更改为edges.push([authorName.trim(),relationIndex,relation]);这样的内容,例如,如果response.data[relationIndex][0]relationIndex 2或其他什么应该返回字符串response.data[relationIndex][0]

2 个答案:

答案 0 :(得分:2)

在javascript对象属性中没有保证顺序。也就是说,你的对象的属性没有位置二。

Does JavaScript Guarantee Object Property Order?

如果您需要订购商品,则需要将它们放入数组中。

答案 1 :(得分:0)

您可以使用以下代码提取作者列表:

var data = {
    " Fairfield, D. H." : [0, 0, 3, 3, 2, 2],
    " Mish, W. H."      : [3, 0, 3, 3, 2, 2],
    " Baker, D. N."     : [0, 0, 0, 0, 2, 2],
    " Curtis, S. A."    : [0, 0, 3, 0, 2, 2],
    "Ocuna, M. H."      : [0, 0, 0, 0, 0, 0],
    " Ogilvie, K. W."   : [0, 0, 0, 0, 2, 0]
};

var authors = [];
for (var name in o) authors.push(name);

现在你已进入authors

[" Fairfield, D. H.", " Mish, W. H.", " Baker, D. N.",
 " Curtis, S. A.", "Ocuna, M. H.", " Ogilvie, K. W."]

但是,作为bhspencer wrote,我们无法保证订单与您的预期相同,因此您的数字可能不符合预期。

最好在json数据中包含(有序)作者列表。