一个线性函数可迭代对象数组并更改一个值

Pra*_*dhi 1 javascript iteration

假设我有一个像这样的对象数组:

let x = [{'a': 0.288888, 'b': 0.5}, {'a':9.565464645654, 'b': 0.6}];
Run Code Online (Sandbox Code Playgroud)

我想迭代这个并将数字更改为固定长度。我试过

x.map((data) => data.a.toFixed(3))
# ["0.289", "9.565"]
Run Code Online (Sandbox Code Playgroud)

预期输出:

[{'a': 0.289, 'b': 0.5}, {'a':9.565, 'b': 0.6}]
Run Code Online (Sandbox Code Playgroud)

使其发挥作用的一种方法是:

x.map((data) => {
    data.a = data.a.toFixed(3);
    return data;
});
Run Code Online (Sandbox Code Playgroud)

还有比这更好的方法吗?

Cer*_*nce 6

使用forEach并改变现有对象:

const x = [{'a': 0.288888, 'b': 0.5}, {'a':9.565464645654, 'b': 0.6}];
x.forEach((data) => data.a = data.a.toFixed(3));
console.log(x);
Run Code Online (Sandbox Code Playgroud)

.map这与您在一行中所做的事情相同,但.map只能用于创建一个新数组 - 如果您只想寻找副作用,请使用forEach.

如果您不想变异并想创建一个新数组,则在 中返回一个新对象.map

const x = [{'a': 0.288888, 'b': 0.5}, {'a':9.565464645654, 'b': 0.6}];
const changedX = x.map(({ a, b }) => ({ a: a.toFixed(3), b }));
console.log(changedX);
Run Code Online (Sandbox Code Playgroud)

如果您的目标是代码可读性(这可能是大多数脚本中最重要的事情),我建议不要尝试将所有内容压缩到一行中 - 它不会使内容更具可读性,通常情况相反。

要使第一个代码段通过no-return-assignarrow-parens规则,请在函数主体两边加上括号,这样它就不是一个简洁的主体:

x.forEach((data) => { data.a = data.a.toFixed(3) });
Run Code Online (Sandbox Code Playgroud)

演示