【问题标题】:Referencing an object title in an array of objects引用对象数组中的对象标题
【发布时间】:2019-10-03 02:04:55
【问题描述】:

我有一个要转换为数组的对象(下面的示例),但转换代码会丢弃密钥,并且需要在以后为每个循环引用密钥,但我不知道如何保留密钥。

 let json = {
    "6250": {
        "property1": "...",
        "property2": "..."
    },
    "6177": {
        "property1": "...",
        "property2": "..."
    },
    "5870": {
        "property1": "...",
        "property2": "..."
    },
    "4297": {
        "property1": "...",
        "property2": "..."
    },
    "5743": {
        "property1": "...",
        "property2": "..."
    }
}

function json2array(json){
    var result = [];
    var keys = Object.keys(json);
    keys.forEach(function(key){
    result.push(json[key]);
});
    return result;
}

var array = json2array(json);

array.forEach(function(elem, i) {
    Output.push(name, elem["property1"], elem["property2"]]);
});

例如,第一个循环中的“name”应该是6250

【问题讨论】:

  • 你确定它是一个数组而不是一个对象吗?看来您有语法错误。我的意思是,你确定第一个 [ 真的是 [ 而不是 {
  • 为什么最后一个 object 不像其他 ID 一样,请检查您的结构,澄清它是对象的 array 还是只是 object。跨度>
  • 更新了代码以进行澄清。感谢您的帮助!

标签: javascript arrays object foreach


【解决方案1】:

Object.entries() 似乎拥有您需要的所有功能。它将为输入对象的每个属性返回一个 [key, value] 数组。这意味着输出将是一个二维数组。

let array2d = Object.entries(json);
array2d.forEach(function (elem) {
    Output.push(elem[0], elem[1].property1, elem[1].property2);
});

【讨论】:

    【解决方案2】:

    这是迭代 json 的最佳和最干净的方法,希望对您有所帮助。

    let dataJson =  {
    "6250": {
         "property1": "...",
         "property2": "..."
     },
     "6177": {
         "property1": "...",
         "property2": "..."
     },
     "5870": {
         "property1": "...",
         "property2": "..."
     },
     "4297": {
         "property1": "...",
         "property2": "..."
     },
     "5743": {
         "property1": "...",
         "property2": "..."
     }
    }
    
    for (let x in dataJson){
      //x is the current key
      console.log(x);
      //getting the values of the current key
      console.log(dataJson[x]);
    }
    

    【讨论】:

    • 我觉得遍历 json 是要走的路,但我无法理解。我只需要以 output.push([ID,propert1,property2]) 结束,我似乎无法到达那里
    【解决方案3】:

    希望我能正确理解您的问题。要将所有值放入 single 数组中,您可以在 Object.keys 上使用 Array.reduce,如下所示:

    let json = { "6250": { "property1": "...", "property2": "..." }, "6177": { "property1": "...", "property2": "..." }, "5870": { "property1": "...", "property2": "..." }, "4297": { "property1": "...", "property2": "..." }, "5743": { "property1": "...", "property2": "..." } }
    
    let result = Object.keys(json).reduce((r,c) => {
      r.push(c, ...Object.values(json[c]))
      return r
    }, [])
    
    console.log(result)

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2019-01-04
      相关资源
      最近更新 更多