【问题标题】:Create custom list from main list in javascript从javascript中的主列表创建自定义列表
【发布时间】:2022-01-12 07:47:39
【问题描述】:

我有一个如下所示的列表对象

[{a:"0"},{a:"1"},....{a:"39"}]

我想要一个类似下面的列表。我需要一个类似下面的结果。

{
  "list1":[{a:"0"},{a:"1"},{a:"2"},{a:"3"}],
  "list2":[{a:"4"},{a:"5"},{a:"6"},{a:"7"}],
  .
  .
  .
  "list10":[{a:"36"},{a:"37"},{a:"38"},{a:"39"}],
}

谢谢你的帮助。

【问题讨论】:

  • 你想要一个对象作为你的输出而不是一个数组有什么原因吗?由于您的对象似乎正在使用顺序键,因此看起来数组可能更适合(然后您可以使用chunking method
  • 到目前为止你尝试了什么?
  • @NickParsons 感谢您的回答。
  • @SaeedAs 如果有帮助,您必须为答案投票

标签: javascript arrays listobject


【解决方案1】:

您可以使用以下代码:

const items = [{a: "0"}, {a: "1"}, {a: "2"}, {a: "3"}, {a: "4"}, {a: "5"}, {a: "6"}, {a: "7"}, {a:"8"}, {a:"9"}, {a:"10"}];
let newItems = {};
let i = 1;
while(items.length){
    newItems[`list${i}`] = items.splice(0,4);
    i++;
}
console.log(newItems)

如果你想保持items 不可变,你可以在while 循环之前将它复制到另一个数组中,例如const copyItems = [...items] 并在while 中使用copyItems

【讨论】:

    【解决方案2】:

    您可以使用 slice() 数据...

    const arr = [{a:"0"},{a:"1"},{a:"2"},{a:"3"},{a:"4"},{a:"5"},{a:"6"},{a:"7"}];
    
    const arr2 = [];
    
    var i,j;
    for (i = 0; i < arr.length; i = i + 4) {
        arr2.push(arr.slice(i, i + 4));
    }
        
    console.log(arr2);

    【讨论】:

      【解决方案3】:

      您可以使用reduce 来实现此目的

      const items = [{ a: "0" }, { a: "1" }, { a: "2" }, { a: "3" }, { a: "4" }, { a: "5" }, { a: "6" }, { a: "7" }];
      items.reduce((accum, curr, index) => {
        const key = `list${1 + Math.floor(index / 4)}`;
        accum[key] = accum[key] || [];
        accum[key].push(curr);
        return accum;
      }, {});
      

      【讨论】:

        【解决方案4】:

        我相信这可能就是您想要的。这会将大数组拆分为较小的数组,并将每个大小为 4 的数组存储在 arrayOfArrays 中。

        var bigarray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
        var size = 4; var arrayOfArrays = [];
        for (var i=0; i<bigarray.length; i+=size) {
          arrayOfArrays.push(bigarray.slice(i,i+size));
        }
        console.log(arrayOfArrays); // [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15]]
        

        【讨论】:

          【解决方案5】:
          var data = [{a:"0"},{a:"1"},{a:"2"},{a:"3"}, {a:"4"},{a:"5"},{a:"6"},{a:"7"},{a:"8"},{a:"9"}]
          
          const sliceData = (data, size) => {
              var result = [];
              for(var i = 0; i < data.length; i += size){
                 result.push(data.slice(i, i + size));
             }
            return result;
          }
          
          console.log(sliceData(data, 4));
          

          结果

          [
            [ { a: '0' }, { a: '1' }, { a: '2' }, { a: '3' } ],
            [ { a: '4' }, { a: '5' }, { a: '6' }, { a: '7' } ],
            [ { a: '8' }, { a: '9' } ]
          ]
          

          【讨论】:

            【解决方案6】:

            Lodash,如果你不介意的话

            使用_.chunk将数组分成大小长度的组。

            import _ from 'lodash';
            
            data = [{a:"0"},{a:"1"},{a:"2"},{a:"3"}, {a:"4"},{a:"5"},{a:"6"},{a:"7"},{a:"8"},{a:"9"}];
            const size = 4;
            const result = _.chunk(data, size)
               .reduce((acc, item, index) => ({ ...acc, [`list${index + 1}`]: item }), {});
            
            console.log(result);
            //{list1: Array(4), list2: Array(4), list3: Array(2)}
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-12-10
              • 1970-01-01
              • 2016-04-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-01-22
              • 2020-05-05
              相关资源
              最近更新 更多