迭代多维数组,过滤并在javascript中创建新数组

时间:2016-11-07 08:56:52

标签: javascript arrays multidimensional-array

我找到了this post,但这并不是我想要的。我有一个具有这种结构的巨大JSON文件:

{
    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]转到data[1]

这可能吗?如果是的话,我该如何实现呢?也许用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]
    }
]
}

1 个答案:

答案 0 :(得分: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; }