2016-11-07 161 views
2

我發現this post但它並不是我真正想要的。我有這個結構的巨大JSON文件:迭代多維數組,在javascript中創建一個新對象

{ 
    foo: [1, 2, 3, ...], 
    bar: [ 
     { 
      name: 'abc', 
      cl: 2, 
      data: [ 
         [[2, 4, 6], [4, 5, 6]], 
         [[5, 3, 5], [5, 7, 9]], 
         [[6, 8, 9], [6, 8, 9]], 
         ... 
        ] 
     }, 
     { 
      name: 'def', 
      cl: 1, 
      data: [10, 20, 30, ...] 
     } 
    ] 
} 

我代表對象類,我可以提取父對象內部的屬性和對象。 foo屬性是強制性的,而bar屬性是可選的。 data是可以是1D或3D的數字數組。 foo.lengthdata.length總是相同的。我想減小文件大小(以內容的方式),但保持相同的結構,即將舊對象複製到具有完全相同結構但較短的新對象,以便我可以定義較小的長度或範圍並獲取新對象,例如如果我說要從foo[0]foo[1]那麼數據屬性也將從data[0]到在新對象中。

這可能嗎?如果是,我該如何實現它?也許與map?但是如何?

function filter(obj, from, to){ 
    /// ? 
} 

問候。

編輯:

新的,減小對象應該是這樣的:

{ 
    foo: [1, 2], 
    bar: [ 
    { 
     name: 'abc', 
     cl: 2, 
     data: [ 
        [[2, 4, 6], [4, 5, 6]], 
        [[5, 3, 5], [5, 7, 9]] 
       ] 
    }, 
    { 
     name: 'def', 
     cl: 1, 
     data: [10, 20] 
    } 
] 
} 
+0

正是你想要如何減少文件的大小? – void

+0

請添加一些用例。 –

+0

我只是編輯問題。 – Macondiana

回答

1

你可以使用Array#slice它。

function slice(obj, from, to) { 
 
    obj.foo = obj.foo.slice(from, to + 1); 
 
    obj.bar.forEach(function (a) { 
 
     a.data = a.data.slice(from, to + 1); 
 
    }); 
 
} 
 

 
var object = { foo: [1, 2, 3], bar: [{ name: 'abc', cl: 2, data: [[[2, 4, 6], [4, 5, 6]], [[5, 3, 5], [5, 7, 9]], [[6, 8, 9], [6, 8, 9]], ] }, { name: 'def', cl: 1, data: [10, 20, 30] }] }; 
 

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

+0

Thank you,it works :) – Macondiana