【问题标题】:Add value to object from array and not become undefined when array runs out从数组向对象添加值,并且在数组用完时不会变为未定义
【发布时间】:2020-05-10 19:50:40
【问题描述】:

我有一个带参数的函数,我正在执行一个 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 开始,而不是仅仅被视为未定义?

【问题讨论】:

  • 为什么不使用name 而不是带有['name'] 字符串的computed property name?你有输入想要输出的例子吗?
  • @NinaScholz,我不确定你的意思

标签: javascript jquery arrays object ecmascript-6


【解决方案1】:

您可以使用模数循环遍历颜色数组中的值。也就是说,将计数器除以颜色数组的长度的余数。

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

【讨论】:

  • 有没有办法用每个x = [...x, ...data(y)]; 重新启动阵列。那么每次推送data(y)时,添加的颜色数组中的值可以从头开始吗?
  • 您可以在循环中重置i = 0
  • 对不起,我该怎么做?
  • 您可以在循环上方定义变量i,并将每个y 设置为零。例如:let i; arr.forEach(y =&gt; { i = 0; x = [...x, ...data(y)]; });
猜你喜欢
  • 2020-12-24
  • 2020-02-28
  • 2020-03-28
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2021-06-21
相关资源
最近更新 更多