簡體   English   中英

JavaScript,僅在數組內創建 2 個對象

[英]JavaScript, create objects inside array with 2 objects only

我想創建一個包含 2 個對象的數組,每個 object 里面都有對象:

這是預期的結果:

[ 
   { 
      "myLayersArray":{ 
         "0":{ 
            "type":"myLayers",
            "filetype":"kml",
            "layerId":"kml-a00c9798-e2a5-4098-9814-0356527fc220",
            "id":1749
         }
      }
   },
   { 
      "figuresArray":{ 
         "0":{ 
            "type":"figure",
            "layerId":"polygon-6e0df465-af64-437e-a451-530e3553aae5",
            "id":1026
         },
         "1":{ 
            "type":"figure",
            "layerId":"polygon-bc371cbf-8e6d-4a26-bdbd-ad1ca3d4700c",
            "id":1031
         }
      }
   }
]

目前,我有 2 個這樣的foreachs

let data = []
const layer = {}
myLayers.layers.forEach( (a,i) => {
  visibleLayers.layers.forEach( (b,j) => {
    if (a.layerId === b.id) {
      layer.type = 'myLayers'
      layer.filetype = a.fileType ? a.fileType : "other"
      layer.layerId = b.id
      layer.id = a.id
      data.push({'myLayers': layer})
    }
  })
})

const element = {}
figures.items.forEach( (a,i) => {
  visibleLayers.layers.forEach( (b,j) => {
    if (a.layerId === b.id) {
      element.type = 'figure'
      element.layerId = b.id
      element.id = a.id
      data.push({'figures': element})
    }
  })
})

console.log('objResult', data)

But I got this:

在此處輸入圖像描述

我應該改變什么? 我想要只有 1 個數字 object 里面有他們的所有對象

編輯:

這是數據:

myLayers.items[ 
   { 
      "id":1750,
      "user_id":1020,
      "filename":"Curico_Test_Share7.kmz",
      "fullname":"1572898499.kmz",
      "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898499.kmz",
      "file_extension":"kmz",
      "file_size":"6276",
      "mime_type":"application/zip",
      "shared":false,
      "created_at":"2019-11-04 20:14:59",
      "updated_at":"2019-11-04 20:14:59",
      "alias":"CURICO_TEST_SHARE7.KMZ",
      "information":null,
      "profile_id":1,
      "layerId":"kmz-0eeb9a1d-5442-477e-bca3-b7fadd6900d2",
      "fileType":"kmz"
   },
   { 
      "id":1749,
      "user_id":1020,
      "filename":"cuadrado poligono.kml",
      "fullname":"1572898478.kml",
      "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898478.kml",
      "file_extension":"kml",
      "file_size":"376",
      "mime_type":"text/xml",
      "shared":false,
      "created_at":"2019-11-04 20:14:38",
      "updated_at":"2019-11-04 20:14:38",
      "alias":"CUADRADO POLIGONO.KML",
      "information":null,
      "profile_id":1,
      "layerId":"kml-f4cb4869-e448-4574-b8d0-e0538b829388",
      "fileType":"kml",
      "isActived":true
   },
   { 
      "id":1751,
      "user_id":1020,
      "filename":"test kmz.kml",
      "fullname":"1572898515.kml",
      "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898515.kml",
      "file_extension":"kml",
      "file_size":"420",
      "mime_type":"text/xml",
      "shared":false,
      "created_at":"2019-11-04 20:15:15",
      "updated_at":"2019-11-04 20:15:15",
      "alias":"TEST KMZ.KML",
      "information":null,
      "profile_id":1,
      "layerId":"kml-1324a441-2767-4ad9-835b-70bf4f32e730",
      "fileType":"kml"
   }
]

visibleLayers.layers[ 
   { 
      "id":"polygon-c33a2008-edb2-415d-99e9-fab264ec1596",
      "name":"test dibujo"
   },
   { 
      "id":"polygon-a373e86b-0068-444b-8a13-4743a022dfb8",
      "name":"asdas"
   },
   { 
      "id":"kml-f4cb4869-e448-4574-b8d0-e0538b829388",
      "name":"CUADRADO POLIGONO.KML"
   }
]

您將錯誤的 object 推入陣列。 這是您如何編輯代碼以獲得所需結果的方法。

let data = {}; //changed array to object
const layer = {}

data.myLayers = []; //added myLayers property to data
data.figures = []; //added figures property to data
myLayers.items.forEach( (a,i) => {
  visibleLayers.layers.forEach( (b,j) => {
    if (a.layerId === b.id) {
      layer.type = 'myLayers'
      layer.filetype = a.fileType ? a.fileType : "other"
      layer.layerId = b.id
      layer.id = a.id
      data.myLayers.push(layer); //changed line
    }
  })
})

const element = {}
figures.items.forEach( (a,i) => {
  visibleLayers.layers.forEach( (b,j) => {
    if (a.layerId === b.id) {
      element.type = 'figure'
      element.layerId = b.id
      element.id = a.id
      data.figures.push(element); //changed line
    }
  })
})

console.log('objResult', data)
//if you want to get the JSON string
var json = JSON.stringify(data)
console.log('jsonResult', json)

下面是顯示結果的簡化代碼片段。

 let data = {} data.myLayers = [] data.figures = []; data.myLayers.push( {'type':'Layer', 'id':'101'} ); data.myLayers.push( {'type':'Layer', 'id':'102'} ); data.figures.push( {'type': 'Figure', 'id': 201} ); data.figures.push( {'type': 'Figure', 'id': 202} ); console.log('objResult', data); console.log('jsonResult', JSON.stringify(data));

有一個 go 使 output 盡可能接近您想要的,同時還嘗試修復您對object作為array的使用 - 也使它更干凈一些。

為了節省您的滾動,output 看起來像

[
  myLayersArray: [{
    type: 'myLayers',
    fileType: 'kml',
    layerId: 'kml-f4cb4869-e448-4574-b8d0-e0538b829388',
    id: 1749
  }],
  myFiguresArray: [{
    type: 'figures',
    layerId: 'polygon-bc371cbf-8e6d-4a26-bdbd-ad1ca3d4700c',
    id: 1031
  }, {
    type: 'figures',
    layerId: 'polygon-6e0df465-af64-437e-a451-530e3553aae5',
    id: 1026
  }]
]

 let myLayers = { items: [{ "id":1750, "user_id":1020, "filename":"Curico_Test_Share7.kmz", "fullname":"1572898499.kmz", "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898499.kmz", "file_extension":"kmz", "file_size":"6276", "mime_type":"application/zip", "shared":false, "created_at":"2019-11-04 20:14:59", "updated_at":"2019-11-04 20:14:59", "alias":"CURICO_TEST_SHARE7.KMZ", "information":null, "profile_id":1, "layerId":"kmz-0eeb9a1d-5442-477e-bca3-b7fadd6900d2", "fileType":"kmz" }, { "id":1749, "user_id":1020, "filename":"cuadrado poligono.kml", "fullname":"1572898478.kml", "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898478.kml", "file_extension":"kml", "file_size":"376", "mime_type":"text/xml", "shared":false, "created_at":"2019-11-04 20:14:38", "updated_at":"2019-11-04 20:14:38", "alias":"CUADRADO POLIGONO.KML", "information":null, "profile_id":1, "layerId":"kml-f4cb4869-e448-4574-b8d0-e0538b829388", "fileType":"kml", "isActived":true }, { "id":1751, "user_id":1020, "filename":"test kmz.kml", "fullname":"1572898515.kml", "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898515.kml", "file_extension":"kml", "file_size":"420", "mime_type":"text/xml", "shared":false, "created_at":"2019-11-04 20:15:15", "updated_at":"2019-11-04 20:15:15", "alias":"TEST KMZ.KML", "information":null, "profile_id":1, "layerId":"kml-1324a441-2767-4ad9-835b-70bf4f32e730", "fileType":"kml" }] }; let figures = { items: [{ "id":1026, "user_id":1020, "filename":"Curico_Test_Share7.kmz", "fullname":"1572898499.kmz", "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898499.kmz", "file_extension":"kmz", "file_size":"6276", "mime_type":"application/zip", "shared":false, "created_at":"2019-11-04 20:14:59", "updated_at":"2019-11-04 20:14:59", "alias":"CURICO_TEST_SHARE7.KMZ", "information":null, "profile_id":1, "layerId":"polygon-6e0df465-af64-437e-a451-530e3553aae5", "fileType":"kmz" }, { "id":1031, "user_id":1020, "filename":"cuadrado poligono.kml", "fullname":"1572898478.kml", "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898478.kml", "file_extension":"kml", "file_size":"376", "mime_type":"text/xml", "shared":false, "created_at":"2019-11-04 20:14:38", "updated_at":"2019-11-04 20:14:38", "alias":"CUADRADO POLIGONO.KML", "information":null, "profile_id":1, "layerId":"polygon-bc371cbf-8e6d-4a26-bdbd-ad1ca3d4700c", "fileType":"kml", "isActived":true }, { "id":1751, "user_id":1020, "filename":"test kmz.kml", "fullname":"1572898515.kml", "full_path":"https://georesearch-mastergeo.s3.amazonaws.com/1572898515.kml", "file_extension":"kml", "file_size":"420", "mime_type":"text/xml", "shared":false, "created_at":"2019-11-04 20:15:15", "updated_at":"2019-11-04 20:15:15", "alias":"TEST KMZ.KML", "information":null, "profile_id":1, "layerId":"polygon-6e0df465-af64-437e-a451-530e3553bae5", "fileType":"kml" }] }; let visibleLayers = { layers: [{ "id":"polygon-bc371cbf-8e6d-4a26-bdbd-ad1ca3d4700c", "name":"test dibujo" }, { "id":"polygon-6e0df465-af64-437e-a451-530e3553aae5", "name":"asdas" }, { "id":"kml-f4cb4869-e448-4574-b8d0-e0538b829388", "name":"CUADRADO POLIGONO.KML" }] }; let data = []; let myLayersArray = []; let myFiguresArray = []; visibleLayers.layers.forEach((visibleLayer) => { myLayers.items.forEach((myLayer) => { if (visibleLayer.id === myLayer.layerId) { myLayersArray.push({ 'type': 'myLayers', 'fileType': myLayer.fileType? myLayer.fileType: 'other', 'layerId': visibleLayer.id, 'id': myLayer.id }); } }), figures.items.forEach((myFigure) => { if (visibleLayer.id === myFigure.layerId) { myFiguresArray.push({ 'type': 'figures', 'layerId': visibleLayer.id, 'id': myFigure.id }); } }) }) data['myLayersArray'] = myLayersArray; data['myFiguresArray'] = myFiguresArray; // Keeps the names console.log(data.myLayersArray); console.log(data.myFiguresArray); // Can still access by index console.log(data.myFiguresArray[0]);

let data = []
let myLayersArray = {}
let figuresArray = {}
let count = 0
myLayers.items.forEach( (a,i) => {
  visibleLayers.layers.forEach( (b,j) => {
    if (a.layerId === b.id) {
      let layer = {}
      layer.type = 'myLayers'
      layer.filetype = a.fileType ? a.fileType : "other"
      layer.layerId = b.id
      layer.id = a.id
      myLayersArray[count] = layer
      count++
    }
  })
})

count = 0
figures.items.forEach( (a,i) => {
  visibleLayers.layers.forEach( (b,j) => {
    if (a.layerId === b.id) {
      let element = {}
      element.type = 'figure'
      element.layerId = b.id
      element.id = a.id
      figuresArray[count] = element
      count++
    }
  })
})
data.push({'myLayersArray': myLayersArray})
data.push({'figuresArray': figuresArray})

console.log('objResult', JSON.stringify(data))

所以我得到了這個(這就是我想要的):

[ 
   { 
      "myLayersArray":{ 
         "0":{ 
            "type":"myLayers",
            "filetype":"kml",
            "layerId":"kml-a00c9798-e2a5-4098-9814-0356527fc220",
            "id":1749
         }
      }
   },
   { 
      "figuresArray":{ 
         "0":{ 
            "type":"figure",
            "layerId":"polygon-6e0df465-af64-437e-a451-530e3553aae5",
            "id":1026
         },
         "1":{ 
            "type":"figure",
            "layerId":"polygon-bc371cbf-8e6d-4a26-bdbd-ad1ca3d4700c",
            "id":1031
         }
      }
   }
]

現在我想擺脫那個count++並使用這么多let

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM