【问题标题】:Split Array object into chucks将 Array 对象拆分为卡盘
【发布时间】:2021-12-01 22:05:03
【问题描述】:

我在 JS 中有这个数组

initialArray = [A,B,C,C,D,E,F,F,G,K]

我要拆分成:

chucks = [[A,B,C], [C,D,E,F], [F,G,K]]

重复项是分隔符,例如“C”或“F”

如何在 ES6 中进行拆分?

【问题讨论】:

    标签: javascript arrays split


    【解决方案1】:

    您可以减少数组并添加值或新数组,具体取决于最后一个值。

    const
        array = ['A','B','C','C','D','E','F','F','G','K'],
        result = array.reduce((r, v, i, { [i - 1]: last }) => {
            if (v === last) r.push([]);
            r[r.length - 1].push(v);
            return r;
        }, [[]]);
    
    console.log(result);

    【讨论】:

    • @LongDang,请看编辑。
    【解决方案2】:

    使用单个 for 循环并将当前块保存在要推送到的变量中的相当直接的解决方案。

    const initialArray = ['A', 'A', 'B', 'C', 'C', 'D', 'E', 'F', 'F', 'G', 'K', 'K'];
    
    const chunk_at_duplicate = (arr) => {
      let chunk = [], res = [chunk];
    
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] === arr[i - 1]) {
          res.push(chunk = []);
        }
    
        chunk.push(arr[i]);
      }
    
      return res;
    };
    
    console.log(chunk_at_duplicate(initialArray));

    【讨论】:

      【解决方案3】:

      已编辑:现在基于克隆

      const initialArray = ["A","B","C","C","D","E","F","F","G","K"];
      const chunks = [];
      let smallChunk = [];
      
      let index = 0;
      
      while (index < initialArray.length){
        smallChunk.push(initialArray[index]);
        
        if (initialArray[index+1] == initialArray[index]){
          chunks.push(smallChunk);
          smallChunk = [];
        }
        
        index++;
      }
      
      chunks.push(smallChunk);
      console.log(chunks);

      【讨论】:

      • 不,您的解决方案是基于块的大小。但在我的情况下,分隔符是 initialArray 中的重复项,
      • @LongDang 看看,现在它是基于克隆的
      【解决方案4】:

      您可以将for ... ofinitialArray.entries() 一起使用,如下所示:

      const initialArray = ["A","B","C","C","D","E","F","F","G","K"];
      
      const chunks = [];
      let start = 0
      for(const [i,v] of initialArray.entries()) {
          if(i > 0 && v === initialArray[i-1]) {
              chunks.push( initialArray.slice(start,i) );
              start = i;
          } else if( i === initialArray.length - 1 ) {
              chunks.push( initialArray.slice(start) );
          }
      }
      
      console.log( chunks );

      【讨论】:

      • 您可以简单地使用initialArray.entries(),它将返回一个带有整数索引的迭代器。
      • 确实如此!谢谢@pilchard。
      猜你喜欢
      • 2021-02-18
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2017-05-06
      • 2018-12-18
      相关资源
      最近更新 更多