【问题标题】:How to convert Arrays of objects of objects into one dimensional array?如何将对象的对象数组转换为一维数组?
【发布时间】:2018-05-18 11:47:18
【问题描述】:

我有一个对象内有对象的 javascript 对象数组的示例。所以我基本上只想要一维数组。

我在 SO 上搜索了很多 Q,但没有一个符合我的要求。

我有什么

[
{
"id": "59cf758f7bdf8d2e0c1c68c7",
"value": {
  "city": "Mahbubnagar",
  "state": "Andhra Pradesh",
  "country": "India"
}
},
{
"id": "59cf758f7bdf8d2e0c1c68c8",
"value": {
  "city": "Udgir",
  "state": "Maharashtra",
  "country": "India"
}
},
{
"id": "59cf758f7bdf8d2e0c1c68c9",
"value": {
  "city": "Umarga",
  "state": "Maharashtra",
  "country": "India"
}
},
{
"id": "59cf758f7bdf8d2e0c1c68ca",
"value": {
  "city": "Umarkhed",
  "state": "Maharashtra",
  "country": "India"
}
},
{
"id": "59cf758f7bdf8d2e0c1c68cb",
"value": {
  "city": "Umred",
  "state": "Maharashtra",
  "country": "India"
}
}
]

而我只是想把这个对象数组变成一个数组

[
  "59cf758f7bdf8d2e0c1c68c7",
  "Mahbubnagar",
  "Andhra Pradesh",
  "India",
],[
  "59cf758f7bdf8d2e0c1c68c9",
  "Umarga",
  "Maharashtra",
  "India",
],[
  "59cf758f7bdf8d2e0c1c68ca",
  "Umarkhed",
  "Maharashtra",
  "India",
],[
  "59cf758f7bdf8d2e0c1c68c7",
  "Mahbubnagar",
  "Andhra Pradesh",
  "India",
],

对象数组可以有更多的孩子,换句话说,你可以说它的动态内容。

我目前使用的是

var object= property.value.elements;
        var finalArray = object.map(function (obj) {
          return obj.id;
        });
        console.log(finalArray);

这只是给了我 ID 的列表

这不是重复的问题,请在将其标记为重复之前验证。

【问题讨论】:

  • 您的示例输出在语法上不正确。
  • 它怎么不正确? @ninesalt
  • 我已经添加了我尝试过的@NinaScholz
  • 再次复制/粘贴您的输出...您发布的内容不正确
  • 您的输出只是一系列未包装在数组中的数组。您可能的意思是将字符串包装在一个对象 [{}, {}...]

标签: javascript jquery arrays datatables


【解决方案1】:

您可以检查对象的值是否为对象,然后为结果取扁平值。

function flat(object) {
    return Object
        .values(object)
        .reduce((r, v) => r.concat(v && typeof v === 'object' ? flat(v) : v), []);
}

var array = [{ id: "59cf758f7bdf8d2e0c1c68c7", value: { city: "Mahbubnagar", state: "Andhra Pradesh", country: "India" } }, { id: "59cf758f7bdf8d2e0c1c68c8", value: { city: "Udgir", state: "Maharashtra", country: "India" } }, { id: "59cf758f7bdf8d2e0c1c68c9", value: { city: "Umarga", state: "Maharashtra", country: "India" } }, { id: "59cf758f7bdf8d2e0c1c68ca", value: { city: "Umarkhed", state: "Maharashtra", country: "India" } }, { id: "59cf758f7bdf8d2e0c1c68cb", value: { city: "Umred", state: "Maharashtra", country: "India" } }],
    result = array.map(flat);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    尝试关注

    var arr = [{"id":"59cf758f7bdf8d2e0c1c68c7","value":{"city":"Mahbubnagar","state":"Andhra Pradesh","country":"India"}},{"id":"59cf758f7bdf8d2e0c1c68c8","value":{"city":"Udgir","state":"Maharashtra","country":"India"}},{"id":"59cf758f7bdf8d2e0c1c68c9","value":{"city":"Umarga","state":"Maharashtra","country":"India"}},{"id":"59cf758f7bdf8d2e0c1c68ca","value":{"city":"Umarkhed","state":"Maharashtra","country":"India"}},{"id":"59cf758f7bdf8d2e0c1c68cb","value":{"city":"Umred","state":"Maharashtra","country":"India"}}];
    
    function getVals(obj, arr) {
      Object.entries(obj).forEach(([key, value]) => {
        if(typeof value === "object") {
          arr = [...arr, ...getVals(obj[key], arr)];
        } else {
          arr.push(value);
        }
      });
      return arr;
    }
    
    var resp = arr.map((item) => {
      let temp = [];
      getVals(item, temp);
      return temp;
    });
    console.log(resp);

    【讨论】:

    • 这是否适用于数组内的多层对象或仅适用于两层@nikhil
    • 非常感谢@nikhil
    【解决方案3】:

    这不是最简单的方法。只需遍历所有对象并提取它们的值。

    let x = [{"id": "59cf758f7bdf8d2e0c1c68c7", "value": {...}, ..] 
    let res = []
    
    x.forEach((obj, index) => {
      res.push([obj.id, obj.value.city, obj.value.state, obj.value.country])
    }) 
    
    console.log(res)
    

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 1970-01-01
      • 2020-11-10
      • 2015-10-22
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2021-12-28
      • 2016-11-28
      相关资源
      最近更新 更多