代码之家  ›  专栏  ›  技术社区  ›  ABC

涉及数组的循环问题

  •  1
  • ABC  · 技术社区  · 5 年前

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

    数据 表示数据内容。

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

    大小 如果存在元数据,则表示每个数据的大小。如果有元数据 11月1日 尺寸为3:

    • 它表示数组中的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,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);
              }
          }
      }
    }
    3 回复  |  直到 5 年前
        1
  •  2
  •   Nick Parsons Felix Kling    5 年前

    可以删除内部if语句,因为它们是重复的,而使用变量 i 打印 加上一个人的元价值。

    在下面的代码片段中,我创建了一个变量 j 用来跟踪我们所处的数据点。它用于在 size 每次 meta 找到了。

    然后在内部for循环中 J型 j+size 这是你的 data 长度数组 大小 是的。

    请参见下面的示例:

    let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    let meta = [1, 0, 1];
    let size = 4;
    
    let j = 0;
    for (let i = 0; i < meta.length; i++) {
      console.log('Meta', i+1);
      if (meta[i]) {
          for(let k = j; k < j+size && k < data.length; k++) {
            console.log(data[k]);
          }
          j+=size;
      } else {
        console.log("-- Nothing --");
      }
    }
        2
  •  1
  •   Mark    5 年前

    听起来你只是想 slice 大小S 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)
        3
  •  1
  •   Maheer Ali    5 年前

    您可以通过以下步骤执行此操作:

    • 创建一个函数 data , meta size 作为三个参数。
    • 创建一个空数组,将得到结果。
    • 然后在 阵列。
    • 然后从一开始就得到数组中与数组大小相等的部分。以及 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))