Javascript 转换为键值对
这就是我要的东西Javascript 转换为键值对,javascript,reactjs,Javascript,Reactjs,这就是我要的东西 const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; let arr = []; for (const [key, value] of Object.entries(...upToPaidCost)) { arr.push({ key: key, value: value }); } console.log(
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ];
let arr = [];
for (const [key, value] of Object.entries(...upToPaidCost)) {
arr.push({ key: key, value: value });
}
console.log(upToPaidCost)
console.log(arr);
预期产出:
[
{
key: "Labour Cost",
value: 54000
},
{
key: "Material Cost",
value: 24900
}
]
它只显示第一个键值,第二个键值丢失,我这里做错了什么?这里对象。条目(…uptpaidcost)
删除使用。。。当您想要复制一个对象时,比如:
const x={…uptpaidcost}代码>
或者对您的案例使用Object.entries({…uptpaidcost})
您可以使用以下代码来执行此操作
const uptpaidcost=[{‘人工成本’:‘54000’},{‘材料成本’:‘24900’}];
设arr=[];
const updatedArr=uptpaidcost.map((项目)=>{
返回{“key”:Object.keys(item)[0],“value”:item[Object.keys(item)[0]}
})
console.log(updatedArr)
问题是,Object.entries
接受一个对象,并且您有一个对象数组。这就是为什么这里需要两个循环:
const uptpaidcost=[{‘人工成本’:‘54000’},{‘材料成本’:‘24900’}];
设arr=[];
用于(UptpaidCost的常数对象){
for(Object.entries(obj))的常量[key,value]{
arr.push({key,value});
}
}
控制台日志(arr)代码>我希望我的代码更具可读性。备选答案
const uptpaidcost=[{‘人工成本’:‘54000’},{‘材料成本’:‘24900’}];
设arr=[];
const final=uptpaidcost.map((项目)=>{
常量键=对象键(项)[0]
返回{key,value:item[key]}
})
console.log(final)
对象。条目(…uptpaidcost)
等于对象。条目({‘人工成本’:‘54000’})
,因此结果是错误的
我们首先需要将对象与reduce方法结合起来:
const uptpaidcost=[{“人工成本”:“54000”},{“材料成本”:“24900”}];
设arr=[];
const conbineObj=uptpaidcost.reduce(
(res,item)=>({…res,…item}),
{}
);
for(Object.entries(conbineObj))的常量[key,value]{
arr.push({key:key,value:value});
}
控制台日志(uptpaidcost);
控制台日志(arr)
如我所见,原始数组中的每个项都是一个对象。所以你可以用这种方法代替迭代
此外,根据预期输出,值是一个数字。所以你可以像这样从字符串到数字转换。
const uptpaidcost=[{‘人工成本’:‘54000’},{‘材料成本’:‘24900’}];
const result=uptpaidcost.map(o=>{
常量[key,value]=对象项(o)[0];
返回{key,value:+value};
});
控制台日志(结果)代码>为什么您的代码段是这样工作的?
在这一行
for (const [key, value] of Object.entries(...upToPaidCost))
您正在将扩展到paidcost
,然后要求Object.entries
以类似数组的形式返回它
所以技术上是这样的:
Object.entries({ 'Labour Cost': '54000' }, { 'Material Cost': '24900' })
如您所见,您正在将两个对象(参数)传递给对象。条目
,它们只接受其中一个(第一个)
所以这一行的解释是这样的
for (const [key, value] of [['Labour Cost': '54000']])`
如何更正代码段?
您可以将Object.entries(…uptpaidcost)
替换为Object.entries(uptpaidcost)
,这样Object.entries
只获得一个简单参数
然后在for循环中,您可以将每个对象推送到arr
您可以在这里查看:
const uptpaidcost=[{‘人工成本’:‘54000’},{‘材料成本’:‘24900’}];
设arr=[];
for(Object.entries(uptpaidcost))的常量[arrayindex,innerObject]{
arr.push(内部对象);
}
控制台日志(uptpaidcost);
控制台日志(arr)代码>仅供参考,您可以在此处生成可运行的代码段。