javascript - 基于先前值自动添加值的 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));
}
请帮帮我..我是这个编程的新手
解决方案
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 = [];
}
推荐阅读
- android - 使用 AlarmManager 在特定时间更新小部件
- javascript - CKEditor 5 需要双击提交按钮才能通过 ajax 发布数据
- java - 如何将不同字母表中的字符串保存到 SQL?
- azure-blob-storage - 上传到 blob 容器后文件大小错误
- python - 用python更改文件中的字符串
- javascript - 如何在边缘扩展中启用删除本地存储权限
- javascript - 按下按钮更改 div 的内部
- reactjs - 错误 这可能不是 npm 的问题
- python - 如何找到使用python从数组中删除所有元素的最低成本
- sql - 如何使用postgres将array_agg中的条件结果放入一行?