我找到了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.length
和data.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]
}
]
}
答案 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; }