Цикл JavaScript для автоматического добавления значений на основе предыдущего значения - PullRequest
0 голосов
/ 28 мая 2018

Я получаю значения из массива 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));
    }

Пожалуйста, помогите мне ... Я новичок в этом программировании

1 Ответ

0 голосов
/ 28 мая 2018

Чтобы разделить массив таким образом и создать новый, содержащий эти фрагменты, вы можете использовать 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 = [];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...