2016-11-07 5 views
2

this postが見つかりましたが、実際には私が探しているものではありません。私は、オブジェクトを表すクラスを持っていると私は親オブジェクト内のプロパティやオブジェクトを抽出することができ多次元配列をフィルタリングし、フィルタリングして新しいものを作成します。

{ 
    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, ...] 
     } 
    ] 
} 

:私はこのような構造を持つ巨大なJSONファイルを持っています。 barプロパティはオプションですが、fooプロパティは必須です。 dataは、1Dまたは3Dの数値配列です。 foo.lengthdata.lengthは常に同じです。私はファイルのサイズ(内容の点で)を減らしたいが、同じ構造を保持する、すなわち古いオブジェクトをまったく同じ構造であるが短いものにコピーする、つまり、より短い長さまたは範囲を定義して新しいオブジェクトを得ることができる、例えばfoo[0]からfoo[1]に行くと言うと、dataプロパティは新しいオブジェクトのdata[0]からにもなります。

これは可能ですか?はいの場合は、どのように達成できますか?たぶんmapと?しかしどのように?

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

よろしくお願いいたします。

EDIT:

{ 
    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

ありがとう、それは動作します:) – Macondiana

関連する問題