问题描述
鉴于数据库中的 array
个:
object
我想要的键和值为负的输出(例如)
detail : [
0: {
Code: "Code 1",Price: "1.00",IncTaxPrice: "1.20",Tax:"0.20",},1: {
Code: "Code 2",Price: "9.00",IncTaxPrice: "9.20",}
]
我尝试使用 [
{
Code: "Code 1",Price: "-1.00",IncTaxPrice: "-1.20",Tax: "-0.20",{
Code: "Code 2",Price: "-9.00",IncTaxPrice: "-9.20",];
,过滤器 map
但它给出了一个错误,我想我遗漏了一些东西。
正确过滤后,我将使用 function
,将 -Math.abs()
转换为 positive
。
negative
像 let final = detail.map(a => Object.values(a).filter(v => typeof v === 'number'))
,price
这样的元素类似于 tax
和 elements
的 8 个不同的 numbers
。
解决方法
感谢@VLAZ 在评论中的建议。我认为您可以使用 Object.keys() 按键进行过滤。
示例如下:
const detail = [
{
Code: "Code 1",Price: "1.00",IncTaxPrice: "1.20",Tax: "0.20",},{
Code: "Code 2",Price: "9.00",IncTaxPrice: "9.20",Tax: "-0.20",];
let final = detail.map(x => ({
Code: x.Code,Price: -Number(x.Price),IncTaxPrice: -Number(x.IncTaxPrice),Tax: -Number(x.Tax),}));
console.log(final);
您应该将 0,1 索引用大括号括起来,因为它是一个对象数组。你不能像你那样定义它,因为索引 0 和 1 不仅仅是数字(fex. [0,1,2]
是有效的但不是 [0:{code:...},1:{code:...}]
它们在里面包含一个对象,所以它们是对象,你可以't map 如果您的对象数组未正确定义为:
[{0:{code:..}},{1:{code:..}}.
也不能使用 typeof 过滤器,因为所有值都是字符串类型。
我会这样:
let detail = [ {
0: {
Code: "Code 1",Tax:"0.20",}},{1: {
Code: "Code 2",}}
]
detail.map(el=>{
el[Object.keys(el)[0]]['Price']=(-parseFloat(el[Object.keys(el)[0]]['Price'])).toString()
el[Object.keys(el)[0]]['IncTaxPrice']=(-parseFloat(el[Object.keys(el)[0]]['IncTaxPrice'])).toString()
el[Object.keys(el)[0]]['Tax']=(-parseFloat(el[Object.keys(el)[0]]['Tax'])).toString()
return
}
)