首页 > 解决方案 > 在减号和数字之间插入“£”以进行计算

问题描述

我有以下数组:

Array (3) 
    0 {_id: "5fea07cd143fd50008ae1ab2", newBalance: 1500, balanceDate: "2020-12-28T16:29:00.391Z"} 
    1 {_id:"5fea0837b2a0530009f3886f", newBalance: 1115, balanceDate: "2020-12-28T16:30:45.217Z"}
    2 {_id: "5fec30faef904e0dd1e39c60", newBalance: 1415, balanceDate: "2020-12-30T07:49:13.214Z"}

然后我有以下函数,它映射通过这个数组并从每个数组中挑选出 newBalance。然后它取上一个值并减去当前值以计算出差值:

  const diffs = debtBalance.map((item, index) =>
    index === 0 ? 0 : debtBalance[index - 1].newBalance - item.newBalance
  );

这将输出以下内容:

Array (3)
0 0
1 385
2 -300

然后我想要做的是在数组中的第二个条目(-300)之类的示例中,取该值并将“-”和 int 分开,然后在它们之间放置一个“£”符号。

因此,如果我记录更新后的数组,输出将如下所示:

// 0, 385, -£300

我对条件句很好,这是有效的,我可以挑选出数字,我只需要在它们之前用“-”对数字进行更改,并在它们之间添加一个“£”。

对于任何反馈,我们都表示感谢!:)

标签: javascript

解决方案


插入 £ 符号时,您需要将数据类型从数字转换为字符串。因此,您可能希望首先将数组中的所有值映射到字符串(保持一致)。喜欢arr.map(String)会这样做。所以这是要做的第一件事。

然后,您可以replace在另一个映射中对每个成员执行 a:

 arr.map(s => s.replace("-", "-£"))

而且,如果您希望货币符号也位于正金额字符串的前面(似乎合乎逻辑),那么与之前的替换一起进行:

 arr.map(s => s.replace(/\d/, "£$&"))

这会将第一位数字替换为以货币符号为前缀的相同数字。在这里,字符串是否带有减号并不重要。

评论

在我看来,diffs数组中的第一个 0 并不是很有用,因为它总是为零。我会忽略那个值。

所以我只会为三个数组生成两个值,如果一个值是正数,我也会在它前面加上货币符号,以保持一致:

const debtBalance = [
   { _id: "5fea07cd143fd50008ae1ab2", newBalance: 1500, balanceDate: "2020-12-28T16:29:00.391Z"}, 
   {_id:"5fea0837b2a0530009f3886f", newBalance: 1115, balanceDate: "2020-12-28T16:30:45.217Z"},
   {_id: "5fec30faef904e0dd1e39c60", newBalance: 1415, balanceDate: "2020-12-30T07:49:13.214Z"}
];

const diffs = debtBalance.slice(1).map((item, index) =>
    item.newBalance - (debtBalance[index - 1]?.newBalance || 0) 
).map(String).map(s => s.replace(/\d/, "£$&"));

console.log(diffs);

当然,您可以在一次map调用中完成这 3 个操作(减法、数据类型转换、替换),但我喜欢这里的关注点分离,代价是 2 次额外的迭代。


推荐阅读