我正在尝试基于模拟元数据创建一个for循环。
数据代表数据内容。
元代表3种不同的元数据类型。如果为1,则表示元数据存在于数据中;如果为0,则表示元数据不存在。
大小表示每个数据的大小(如果存在元数据)。因此,如果存在尺寸为3的 1 1 1 元数据
我遇到的问题是正确地从左到右依次读取它,如果它用完了数据而不是创建新数据,请停止从数组中读取。
如果我们的数据为[1、2、3、4、5],元数据为1、1、1,大小1,则应该为:
元1:1
元2:2
元3:3
或者如果它是[1、2、3、4、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);
}
}
}
}
答案 0 :(得分:2)
您可以删除内部if语句,因为它们是重复项,而是使用变量i
打印i
th 加上一个元数据。
在下面的代码段中,我创建了一个变量j
,该变量用于跟踪数据所在的点。找到每个size
时,该字段用于跳至meta
的各段。
然后在内部for循环中,我从j
循环到j+size
,这是长度data
的{{1}}数组的特定部分。
请参见以下示例:
size
答案 1 :(得分:1)
您可以按照以下步骤进行操作:
data
,meta
和size
作为三个参数的函数。meta
数组。push()
放入结果数组。
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))
答案 2 :(得分:1)
听起来好像您只想从slice
中提取size
大小的data
,如果meta标志为true。只要跟踪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)