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

Iterate over multidimensional array, filter and create new one in javascript

本文关键字:数组 创建 新数组 javascript 过滤 迭代      更新时间:2023-09-26

我发现了这篇文章,但它不是我真正想要的。我有一个巨大的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]
    }
]
}

您可以使用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; }