[英]converting to to key value pairs
这是我的 object
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);
预期 output:
[
{
key: "Labour Cost",
value: 54000
},
{
key: "Material Cost",
value: 24900
}
]
它只显示第一个键值,第二个丢失了,我在这里做错了什么?
问题是, Object.entries
需要一个 object,而你有一个数组。 这就是为什么你需要两个循环:
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; let arr = []; for (const obj of upToPaidCost) { for (const [key, value] of Object.entries(obj)) { arr.push({key, value}); } } console.log(arr);
或两个嵌套的map
:
arr = upToPaidCost.flatMap(obj =>
Object.entries(obj).map(([key, value]) => ({key, value})))
您可以使用以下代码来执行此操作
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; let arr = []; const updatedArr = upToPaidCost.map((item)=>{ return {"key":Object.keys(item)[0],"value":item[Object.keys(item)[0]]} }) console.log(updatedArr)
如我所见,原始数组中的每个项目都是 object。 所以你可以这样做而不是迭代。
此外,根据预期的 output,value 是一个数字。 所以你可以像这样从字符串转换为数字。
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; const result = upToPaidCost.map(o => { const [key, value] = Object.entries(o)[0]; return {key, value: +value}; }); console.log(result);
我喜欢我的代码更具可读性。 替代答案。
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; let arr = []; const final = upToPaidCost.map((item)=>{ const key = Object.keys(item)[0] return { key, value: item[key] } }) console.log(final)
Object.entries(...upToPaidCost)
等于Object.entries({ 'Labour Cost': '54000' })
,所以结果是错误的。
我们需要先用reduce方法组合对象:
const upToPaidCost = [{ "Labour Cost": "54000" }, { "Material Cost": "24900" }];
let arr = [];
const conbineObj = upToPaidCost.reduce(
(res, item) => ({ ...res, ...item }),
{}
);
for (const [key, value] of Object.entries(conbineObj)) {
arr.push({ key: key, value: value });
}
console.log(upToPaidCost);
console.log(arr)
在这一行
for (const [key, value] of Object.entries(...upToPaidCost))
您正在传播upToPaidCost
,然后要求Object.entries
将其作为类似数组的形式返回。
所以从技术上讲是这样的:
Object.entries({ 'Labour Cost': '54000' }, { 'Material Cost': '24900' })
如您所见,您将 2 个对象(参数)传递给Object.entries
,它只接受其中一个(第一个)
所以这条线会这样解释
for (const [key, value] of [['Labour Cost': '54000']])`
您可以将Object.entries(...upToPaidCost)
替换为Object.entries(upToPaidCost)
所以Object.entries
只得到一个简单的参数
然后在for循环中,可以将每个object推送到arr
你可以在这里查看:
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; let arr = []; for (const [arrayindex, innerObject] of Object.entries(upToPaidCost)) { arr.push(innerObject); } console.log(upToPaidCost); console.log(arr);
如您所见,这些值仍然是字符串,如果您要将它们转换为数字,则可以获取键和值并创建新对象并将它们推送到arr
,如下所示:
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; let arr = []; for (const [upToPaidCostIndex, innerObject] of Object.entries(upToPaidCost)) { const key = Object.keys(innerObject)[0]; const value = Object.values(innerObject)[0]; arr.push({[key]: +value}); } console.log(upToPaidCost); console.log(arr);
const upToPaidCost = [ { 'Labour Cost': '54000' }, { 'Material Cost': '24900' } ]; const upToPaidCosts = upToPaidCost.reduce((res, item) => ({...item, ...res}), {}); const arr = Object.entries(upToPaidCosts).map(([key, value]) => ({[key]: +value})) console.log(upToPaidCost); console.log(arr);
在这里Object.entries(...upToPaidCost)
删除...
使用... 当您想复制 object 时,例如: const x = {...upToPaidCost};
或为您的情况使用Object.entries({...upToPaidCost})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.