Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 转换为键值对_Javascript_Reactjs - Fatal编程技术网

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)仅供参考,您可以在此处生成可运行的代码段。