涉及数组的循环问题

时间:2019-06-15 15:58:05

标签: javascript arrays metadata

我正在尝试基于模拟元数据创建一个for循环。

数据代表数据内容。

代表3种不同的元数据类型。如果为1,则表示元数据存在于数据中;如果为0,则表示元数据不存在。

大小表示每个数据的大小(如果存在元数据)。因此,如果存在尺寸为3的 1 1 1 元数据

  • 它表示数组中的meta 1前3个元素,数组中的meta 2接下来3个元素,meta 3接下来的3个元素。

我遇到的问题是正确地从左到右依次读取它,如果它用完了数据而不是创建新数据,请停止从数组中读取。

如果我们的数据为[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);
          }
      }
  }
}

3 个答案:

答案 0 :(得分:2)

您可以删除内部if语句,因为它们是重复项,而是使用变量i打印i th 加上一个元数据。

在下面的代码段中,我创建了一个变量j,该变量用于跟踪数据所在的点。找到每个size时,该字段用于跳至meta的各段。

然后在内部for循环中,我从j循环到j+size,这是长度data的{​​{1}}数组的特定部分。

请参见以下示例:

size

答案 1 :(得分:1)

您可以按照以下步骤进行操作:

  • 创建一个将datametasize作为三个参数的函数。
  • 创建一个空数组,将得到结果。
  • 然后循环遍历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)