Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-从数组创建多维数组_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

javascript-从数组创建多维数组

javascript-从数组创建多维数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,您好,我想在JavaScript多维数组中创建如下内容: var multiLayer = [ ["First", "Second", 4], [5, 6, 3], [3, 2, 1] ]; 从这样的简单数组 var simple = [ "First", "Second", 4, 5, 6, 3, 3, 2, 1 ]; 这是我的代码 var multi = []; var howMuchBreak = 3; for (var i = 0;

您好,我想在JavaScript多维数组中创建如下内容:

var multiLayer = [
  ["First", "Second", 4],
  [5, 6, 3],
  [3, 2, 1]
];
从这样的简单数组

var simple = [
  "First",
  "Second",
  4,
  5,
  6,
  3,
  3,
  2,
  1
];
这是我的代码

var multi = [];
var howMuchBreak = 3;

for (var i = 0; i < simple.length; i++) {
  multi.push(simple[i + howMuchBreak])
}
变量howMuchBreak定义必须在索引中的哪个位置创建下一个嵌套数组。

您可以使用array.slicestart、end并按所需子数组长度递增起始值: 简单变量=[ 第一 第二 4. 5. 6. 3. 3. 2. 1. ]; var=[]; //子数组长度,在示例3中 var l=3; 对于var i=0;i您可以使用Array.slicestart、end并按所需的子数组长度递增start: 简单变量=[ 第一 第二 4. 5. 6. 3. 3. 2. 1. ]; var=[]; //子数组长度,在示例3中 var l=3;
对于var i=0;i另一个解决方案,使用余数%运算符。另一个答案用更少的行来解决这个问题,实际上,另一个答案用18行来解决,我用19行来解决,但我添加这个只是为了让你熟悉%运算符,非常有用

引用MDN:

余数运算符返回一个操作数除以第二个操作数时剩余的余数

仔细思考代码,并尝试找出该操作员为什么以及如何适合您的情况: 简单变量=[ 第一 第二 4. 5. 6. 3. 3. 2. 1. ]; var多重=[]; 变量子数组长度=3; 对于var i=0;iconsole.logmulti 另一个解决方案,使用余数%运算符。另一个答案用更少的行来解决这个问题,实际上,另一个答案用18行来解决,我用19行来解决,但我添加这个只是为了让你熟悉%运算符,非常有用

引用MDN:

余数运算符返回一个操作数除以第二个操作数时剩余的余数

仔细思考代码,并尝试找出该操作员为什么以及如何适合您的情况: 简单变量=[ 第一 第二 4. 5. 6. 3. 3. 2. 1. ]; var多重=[]; 变量子数组长度=3; 对于var i=0;i
var arr=[1,2,3,4,5,6,7,8,9,10]
var array = [], chunk = 3;

while (arr.length > 0){ array.push(arr.splice(0, chunk)); }

console.log(array);
或者在

var arr=[1,2,3,4,5,6,7,8,9,10]
var array = [], chunk = 3;

while (arr.length > 0){ array.push(arr.splice(0, chunk)); }

console.log(array);
我做了三个变化:

第一自适应限制器 它所做的是,好吧,做你想做的,但如果还有空间,就进行调整

例如:

数组:[1,2,3,4,5] 突破:2 将生成:[[1,2],[3,4],[5]]

简单变量=[ 第一 第二 4. 5. 6. 3. 3. 2. 1. ];

第三,类似ES6 API 它与上面的其他产品一样,但更加优雅。此外,我还想向您介绍javascript的新特性,以改进代码

该代码使用具有两个属性的配置JSON:

自适应:默认为true 突破: 只需先传递简单数组,然后将配置传递给simpleToMulti函数:

让multi=simpleToMulti-simpleArray,config

例1:

数组:[1,2,3,4,5] 配置:{adaptive:true,breakBy:3} 将生成:[[1,2,3],[4,5]] 例2:

数组:[1,2,3,4,5] 配置:{adaptive:false,breakBy:2} 将生成:[[1,2],[3,4],[5,未定义]]

我做了三个变化:

第一自适应限制器 它所做的是,好吧,做你想做的,但如果还有空间,就进行调整

例如:

数组:[1,2,3,4,5] 突破:2 将生成:[[1,2],[3,4],[5]]

简单变量=[ 第一 第二 4. 5. 6. 3. 3. 2. 1. ];

第三,类似ES6 API 它与上面的其他产品一样,但更加优雅。此外,我还想向您介绍javascript的新特性,以改进代码

该代码使用具有两个属性的配置JSON:

自适应:默认为true 突破: 只需先传递简单数组,然后将配置传递给simpleToMulti函数:

让multi=simpleToMulti-simpleArray,config

例1:

数组:[1,2,3,4,5] 配置:{adaptive:true,breakBy:3} 将生成:[[1,2,3],[4,5]] 例2:

数组:[1,2,3,4,5] 配置:{adaptive:false,breakBy:2} 将生成:[[1,2],[3,4],[5,未定义]]


我花了一个小时试图找到一种从整数数组创建多维数组的方法。这就是我最终从中得出的ReducerRightandTimesare


我花了一个小时试图找到一种从整数数组创建多维数组的方法。这就是我最终从中得出的ReducerRightandTimesare


就行长度而言,您的答案是最短的,即使在对数组进行多衬里之后也是如此:应该注意的是,这并没有保留原始的一维数组。@在此处插入\u name\u我认为这是可以忽略的,因为它在与
原始阵列。但是,我相信有一个小误解,整个解决方案依赖于使用拼接,而这并不是OP要求的,因为它修改了原始阵列。但是,我相信有一个小误解,整个解决方案依赖于使用splice,而这并不是OP所要求的,因为它修改了原始数组。您的答案是最短的,即使在您对数组进行了多衬里处理之后,就行长度而言:需要注意的是,这并没有保留原始的一维数组。@在此处插入\u name\u我认为这是可以忽略的,因为当与原始阵列一起提供时,它将提供正确的结果。但是,我相信有一个小误解,整个解决方案依赖于使用拼接,这不是OP真正要求的,因为它修改了原始阵列。但是,我相信有一个小误解,整个解决方案依赖于使用splice,而这并不是OP所要求的,因为它修改了原始阵列。非自适应版本不是一个功能,它是一个bug,为什么要这样做?。此外,如果您没有使用块作用域,则不需要使用let;对于let将绑定到全局作用域或封闭函数的作用域的情况,您应该坚持使用var。这是您的示例,但如果您感兴趣,我会做一些修改:谢谢!我习惯了总是使用let,忘记了如果我已经在函数中,var也会这样做。不完全一样。。。但在这种情况下还是可以的。我不会说非自适应是一个bug,因为他可能真的希望每个数组都有相同的长度,idk,这不清楚,所以我这样做只是为了确定。感谢您花时间进行修改!:非自适应版本不是一个特性,它是一个bug,为什么您想要这种行为?。此外,如果您没有使用块作用域,则不需要使用let;对于let将绑定到全局作用域或封闭函数的作用域的情况,您应该坚持使用var。这是您的示例,但如果您感兴趣,我会做一些修改:谢谢!我习惯了总是使用let,忘记了如果我已经在函数中,var也会这样做。不完全一样。。。但在这种情况下还是可以的。我不会说非自适应是一个bug,因为他可能真的希望每个数组都有相同的长度,idk,这不清楚,所以我这样做只是为了确定。感谢您花时间进行修改!:您可以使用。也可以使用,因为它是自己的。也可以自己购买
var multi = [];
var howMuchBreak = 2;
var i = 0; // start counting simple array elements
var x = 0; // start counting limited array elements

while (i < simple.length) {

  var limitedArray = [];
  x = 0;
  while (x < howMuchBreak) {
    limitedArray.push(simple[i]);
    x++;
    i++;
  }

  multi.push(limitedArray);

}
let simple = ["First", "Second", 4, 5, 6, 3, 3, 2, 1];

let config = {
  breakBy: 4,
  adaptive: true
};

function simpleToMulti(arr, config) {

  // normalize config
  if (config.breakBy === undefined) {
    console.warn('simpleToMulti: You must inform the breakBy config property');
    return;
  }
  config.adaptive = config.adaptive === undefined ? true : config.adaptive;

  // do the magic
  let limitedArray = [];
  let multiArray = [];
  arr.forEach( value => {

    if (limitedArray.length < config.breakBy) {
      limitedArray.push(value);
    }

    if (limitedArray.length === config.breakBy) {
      multiArray.push(limitedArray);
      limitedArray = [];
    }

  });

  if (limitedArray.length !== 0) {
    if (config.adaptive) {
      multiArray.push(limitedArray);
    } else {
      while (limitedArray.length < config.breakBy) {
        limitedArray.push(undefined);
      }
      multiArray.push(limitedArray);
    }
  }

  return multiArray;
}


let multi = simpleToMulti(simple, config);
console.log(multi);
let dimensions = [1, 2, 3]

_.reduceRight(dimensions, (result, dimension) => {
    return _.times(dimension, () => result)    
}, [])