首页 > 解决方案 > 基于先前值自动添加值的 JavaScript 循环

问题描述

我从 PHP 数组中获取值并存储在 JavaScript 变量数组中。

var js_array = [<?php echo '"'.implode('","', $count_common_months_arr).'"' ?>]; 
/* Result for js_array is : 5,4,4,5,4,4,5,4,4,5,4,4 */
var table_data_array = [0.10,0.15,0.10,0.10,0.90,2.50,0.10,0.90,0.90,0.40,0.30,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,];

我想使用循环对数组进行切片,以便通过使用 jQuery 或 JavaScript 循环获得如下所示。

table_data_array.slice(0, 5);   start_value = 0; end = 5(first value in js_array) 
/* Note: Taking End values from js_array variable */
table_data_array.slice(5, 9);   start = 5; end = 5+4(second value in js_array) = 9;
table_data_array.slice(9, 13);  start_value = 9; end_value = 9+4(third value in js_array) = 13;
table_data_array.slice(13, 18); start_value = 13; end_value = 13+5(fourth value in js_array) = 18;
table_data_array.slice(18, 22); start_value = 18; end_value = 18+4(fifth value in js_array) = 22;
table_data_array.slice(22, 26); start_value = 22; end_value = 22+4(sixth value in js_array) = 26;
table_data_array.slice(26, 31); start_value = 26; end_value = 26+5(seventh value in js_array) = 31;
and so on...

if we execute table_data_array.slice(0, 5) /* 0.10,0.15,0.10,0.10,0.90 */
if we execute table_data_array.slice(5, 9) /* 2.50,0.10,0.90,0.90 */
and so..on..

我使用了下面的循环,并没有找到任何逻辑来获得上述结果。

for (i = 0; i <= js_array.length; i++) {
        var end = js_array[i];
        var start = 0;  
        console.log(table_data_array.slice(start, end));
    }

请帮帮我..我是这个编程的新手

标签: javascriptphpjqueryarraysloops

解决方案


Array.prototype.reduce要以这种方式拆分数组并创建一个包含这些切片的新数组,您可以Array.prototype.splice像这样使用

const js_array = [5,4,4,5,4];
const table_data_array = [0.10,0.15,0.10,0.10,0.90,2.50,0.10,0.90,0.90,0.40,
  0.30,0.10,0.15,0.10,0.10,0.90,2.50,0.10,0.90,0.90,0.40,0.30];


const result = js_array.reduce((acc, v) =>
  acc.concat([table_data_array.splice(0, v)]), []);

console.log(result);

如果你真的想使用循环,那么你可以这样做。

const js_array = [5,4,4,5,4];
const table_data_array = [0.10,0.15,0.10,0.10,0.90,2.50,0.10,0.90,0.90,0.40,
  0.30,0.10,0.15,0.10,0.10,0.90,2.50,0.10,0.90,0.90,0.40,0.30];

let counter = 0;

for (let i = 0; i < js_array.length; i++) {
  let slice = [];
  for (let j = 0; j < js_array[i]; j++) {
    slice.push(table_data_array[counter++]);
  }
  console.log(slice);
  slice = [];
}


推荐阅读