javascript - 从数组向对象添加值,并且在数组用完时不会变为未定义
问题描述
我有一个带参数的函数,我正在执行一个 forEach 循环来添加循环中的所有值。
const data = (sd) => Object.entries(obj).map(([k, g]) => ({
['name']: k,
['data']: g.map(entry => entry[sd]),
['type']: sd
}));
然后我将它们推入一个巨大的数组中:
let arr = ['abc', 'xyz'];
let x = [];
arr.forEach(y => {
x = [...x, ...data(y)];
});
我还想将另一个键值对添加到data
. 我希望值来自数组:
color_array = ['red', 'blue', 'green']
所以我做了:
const data = (sd) => Object.entries(obj).map(([k, g]) => ({
['name']: k,
['data']: g.map(entry => entry[sd]),
['type']: sd,
['color']: color_arr[i++]
}));
输出:
color: "red"
data: (3) [1, 2, 3]
name: "Jim"
type: "Manager"
color: "blue"
data: (3) [1, 2, 3]
name: "Steve"
type: "Manager"
color: "green"
data: (3) [1, 2, 3]
name: "John"
type: "Manager"
--------------------NEW SET----------------
color: undefined
data: (3) [1, 2, 3]
name: "John"
type: "CEO"
color: undefined
data: (3) [1, 2, 3]
name: "John"
type: "COO"
当我这样做时,因为我的数组中只有 5 个元素,所以其余的值都是undefined
. 有什么方法可以让我从数组中添加元素以从 color_arr 的开头开始?
我的意思是,对于每一个x = [...x, ...data(y)];
,添加到 data(y) 的颜色是否总是从 开始red
,而不仅仅是被视为未定义?
解决方案
您可以使用模数循环遍历颜色数组中的值。也就是说,将计数器除以颜色数组的长度的余数。
const color_array = ['red', 'blue', 'green', 'black', 'white'];
let i = 0;
for (j = 0; j < 20; j++) {
console.log(color_array[i++ % color_array.length]);
}
未经测试的代码版本:
const data = (sd) => Object.entries(obj).map(([k, g]) => ({
['name']: k,
['data']: g.map(entry => entry[sd]),
['type']: sd,
['color']: color_array[i++ % color_array.length]
}));
有关%
运算符的更多信息:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder
推荐阅读
- google-apis-explorer - Youtube Data API v3 响应,我已经超出了我的配额,但在配额页面中,它说每天的查询数是 0
- javascript - 检查表单的单选按钮值
- java - 在另一个活动中传递数组列表时出错
- python - 为 DASK 工作人员使用新的 python 环境
- angular - 包括第三方库的类型会提供通过 Angular CLI 找不到的模块?
- wordpress - 安装 WordPress 成功后如何显示 apache2 起始页?
- javascript - 无法使用 JS 更改元素类
- python - 为什么 MATLAB 中的 imclose(Image,nhood) 给出的输出与 OpenCV 中的 MORP.CLOSE 不同?
- python - Python:清理要插入 mysql 的字符串
- amazon-cognito - AWS Cognito - 如何重新发送电子邮件确认码?