我正在尝试建立一个基于模拟元数据的for-循环。
data 表示数据内容。
Meta表示3种不同的元数据类型。如果有1,则表示数据中存在元数据,如果存在0,则表示它不存在。
如果存在元数据,则 size 表示每个数据的大小。因此,如果有大小为3的11-1元数据:
我遇到的问题是正确地从左到右依次读取它,如果它耗尽了数据而不创建新的数据,就停止从数组中读取。
如果我们有1,2,3,4,5的数据和1,1,1的元数据,那么它应该是:
元1: 1
元2: 2
元3: 3
或者,如果数据为1、2、34、5、6、7、8、9、10、11、12,而元数为1、0、1,大小为4,则应为:
元1: 1 2 3 4
元2:没有
元3: 5 6 7 8
到目前为止我所拥有的是:
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let meta = [1, 0, 1];
let size = 4;
for (let i = 0; i < 3; i++) {
if (meta[i]) {
if (i == 0) {
console.log('Meta', 1);
for (let i = 0; i < size; i++) {
console.log(data[i]);
}
}
if (i = 1) {
console.log('Meta', 2);
for (let i = 0; i < size; i++) {
console.log(data[i] + size);
}
}
if (i = 2) {
console.log('Meta', 3);
for (let i = 0; i < size; i++) {
console.log(data[i] + size + size);
}
}
}
}
发布于 2019-06-15 16:09:47
您可以通过以下步骤实现这一点:
data
、meta
和size
为三个参数的函数。meta
数组上循环。
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let meta = [1, 0, 1];
let size = 4;
function parts(data,meta,size){
let res = [];
for(let i = 0;i<meta.length;i++){
res.push(data.slice(0,size * meta[i]));
data = data.slice(meta[i] * size);
}
return res;
}
console.log(parts(data,meta,size))
发布于 2019-06-15 16:11:46
听起来,如果元标志是真的话,您只想从slice
获取大小为size
的data
。您应该能够做到这一点,只需在meta
上循环,同时跟踪数据中的当前位置:
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let meta = [1, 0, 1];
let size = 4;
let res = [];
for (let i = 0, cur = 0; i < meta.length; i++){
res.push(data.slice(cur, cur + size * meta[i]))
cur += size * meta[i]
}
console.log(res)
https://stackoverflow.com/questions/56611946
复制相似问题