【问题标题】:How to access object using index notation [duplicate]如何使用索引符号访问对象[重复]
【发布时间】:2015-10-01 14:51:49
【问题描述】:

我正在尝试使用表格数据制作一个对象

 var cond = [
        { 
    "locality": "Dwarka",
    "Created ->OFP": "4.73",
    "OFP -> Picked": "2.16",
    "Picked - > Delivery": "14.91",
    "Over_All_TAT": "22.65",
    "Total_Order": "159" 
  },
  {
    "locality": "IIT & AIIMS",
    "Created ->OFP": "2.56",
    "OFP -> Picked": "9.74",
    "Picked - > Delivery": "19.41",
    "Over_All_TAT": "32.61",
    "Total_Order": "54"
  },
  {
    "locality": "Gk1 & Nehru Place",
    "Created ->OFP": "2.39",
    "OFP -> Picked": "6.87",
    "Picked - > Delivery": "14.06",
    "Over_All_TAT": "24.13",
    "Total_Order": "31"
  },
  {
    "locality": "Mayur Vihar",
    "Created ->OFP": "3.52",
    "OFP -> Picked": "1.24",
    "Picked - > Delivery": "15.3",
    "Over_All_TAT": "21.03",
    "Total_Order": "33"
  },
  {
    "locality": "Snapdeal_Mundhka",
    "Created ->OFP": "17.32",
    "OFP -> Picked": "4.65",
    "Picked - > Delivery": "100.32",
    "Over_All_TAT": "123.16",
    "Total_Order": "31"
  }
  ]

我知道键名不符合规则,但那些是列名。我可以访问第二列说 Created -> OFP using index(例如cond[0][1])。

我只能访问 cond[i] 我如何访问内部块元素。

当我使用 R 时,json 对象是使用 jsonlite 包创建的,所以,我有限制。

【问题讨论】:

  • 像这样:cond[i]['Created ->OFP']
  • 这不是 JSON,它是一个普通的 JavaScript 对象。 JSON 只是一种表示对象的字符串格式。它将被解析为JSON.parse()
  • @Kay 和 Craicerjack:看起来像个骗子,但我不相信他们实际上在问同样的问题。 OP 希望使用数字索引而不是属性名称来访问嵌套对象。

标签: javascript json jsonlite


【解决方案1】:

您可以像这样访问内部块:

cond[i]['Created ->OFP']

循环示例:

var cond = [{
  "locality": "Dwarka",
  "Created ->OFP": "4.73",
  "OFP -> Picked": "2.16",
  "Picked - > Delivery": "14.91",
  "Over_All_TAT": "22.65",
  "Total_Order": "159"
}, {
  "locality": "IIT & AIIMS",
  "Created ->OFP": "2.56",
  "OFP -> Picked": "9.74",
  "Picked - > Delivery": "19.41",
  "Over_All_TAT": "32.61",
  "Total_Order": "54"
}, {
  "locality": "Gk1 & Nehru Place",
  "Created ->OFP": "2.39",
  "OFP -> Picked": "6.87",
  "Picked - > Delivery": "14.06",
  "Over_All_TAT": "24.13",
  "Total_Order": "31"
}, {
  "locality": "Mayur Vihar",
  "Created ->OFP": "3.52",
  "OFP -> Picked": "1.24",
  "Picked - > Delivery": "15.3",
  "Over_All_TAT": "21.03",
  "Total_Order": "33"
}, {
  "locality": "Snapdeal_Mundhka",
  "Created ->OFP": "17.32",
  "OFP -> Picked": "4.65",
  "Picked - > Delivery": "100.32",
  "Over_All_TAT": "123.16",
  "Total_Order": "31"
}]
var val;
cond.forEach(function(el) {
  val = el['Created ->OFP'];
  console.log(val);
});

【讨论】:

  • 对于特定列:cond[0]['Created ->OFP']cond[1]['Created ->OFP']
  • 从对原始问题的编辑和 OP 的 cmets,我认为这实际上并不是他们所要求的。
【解决方案2】:

据我了解,您希望能够做的事情是:

cond[0][1];   // "4.73"

您不能这样做,因为cond[0] 是和对象,并且不能保证对象中键的顺序。因此,仅仅因为Created ->OFP 是您输入的第二个键 并不意味着它实际上是对象中的第二个键。您可以查看Object.keys(cond[0]),密钥可能会以相同的顺序返回,但您不能依赖此

听起来您需要做的是将数组中的对象(不是其他人指出的 JSON)转换为数组本身。所以你最终会得到类似的东西:

[
    [
        "Dwarka",
        "4.73",
        "2.16",
        "14.91",
        "22.65",
        "159"
    ],...
]

然后你可以这样做:

cond[0][1];   //and get the first row and second column.

要将您的原始数据转换为数组数组,您可以执行以下操作:

// Note: this is the order **you** want the columns to be iterated in
var columns = ["locality",
    "Created ->OFP",
    "OFP -> Picked",
    "Picked - > Delivery",
    "Over_All_TAT",
    "Total_Order"];

var arrayOfArrays = cond.map(function (i) {
    return columns.map(function (prop) {
        return i[prop];
    });
});

console.log(arrayOfArrays[0][1]);   // logs 4.73

Fiddle

【讨论】:

    【解决方案3】:

    你可以像这样访问你的元素:

    cond[i]["Created ->OFP"]; // "4.73"
    

    如果你想使用像 1、2 这样的索引,你有两个选择: 使用数组而不是对象,它看起来像这样:

     var cond = [
            ["Dwarka", "4.73", "2.16", "14.91", "22.65", "159" ],
            [ ... ]
      }
    

    或者您可以在对象上使用索引 1、2 ...,如下所示:

    var cond = [
            { 
        "0": "Dwarka",
        "1": "4.73",
        "2": "2.16",
        "3": "14.91",
        "4": "22.65",
        "5": "159" 
      },
      {...}
    ]
    

    但您不会找到属性length,除非您将其作为元素添加到您的对象中。


    我认为对你来说最好的解决方案是保持你的对象不变,并使用循环for(key in cond)

    for(var i=0; i<cond.length; i++) {
        for(var key in cond[i]) {
           console.log(cond[i][key]);
        }
    }
    

    【讨论】:

    • @R3tep 我想使用 column number 。喜欢 2 、 3 并说上
    • @MukeshKumarSingh:你不能。无法保证 javascript 对象中键的顺序。如果您需要能够通过数字索引访问事物,那么您需要一个数组。
    • @MukeshKumarSingh,检查更新
    • @Khalid:不保证使用for...in 迭代密钥的顺序。它可能在大多数情况下都可以工作,但依赖它是非常糟糕的做法。您实际上是将自己与for...in 的特定实现联系在一起。
    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 2011-12-24
    • 2018-12-21
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多