gpt4 book ai didi

javascript - 如何从 JavaScript 中的键值对对象创建单个对象?

转载 作者:行者123 更新时间:2023-11-29 20:55:59 25 4
gpt4 key购买 nike

我有几个对象,我想创建另一个对象,该对象将具有来自特定数组 (const props = []) 的键和来自这些对象的值 - 如果它仅存在于那些对象中,但如果不是 - 我想推送 null 或其他一些假值。

我的代码:

const props = ["name", "price", "qty", "category"]
let len = props.length;

const obj_1 = {
name: "Product_1",
price: 120,
category: 'phone'
}

const obj_2 = {
name: "Product_2",
price: 7893,
category: 'program_eq',
qty: 5
}

const final_obj = {
name: ["Product_1", "Product_2"],
price: [120, 7893],
category: ["phone", "program_eq"],
qty: [null, 5]
}

我花了很多时间解决这个问题并找到了一些解决方案 - 但它只给了我第一个对象。我正在使用 lodash/map,它可以帮助我处理不同类型的集合。

你可以在下面看到我的解决方案:

const final_obj = {};
const props = ["name", "price", "qty", "category"];
let len = props.length;

const obj = {
c1s6c156a1cascascas: {
item: {
name: "Product_1",
price: 120,
category: "phone"
}
},
c454asc5515as41cas78: {
item: {
name: "Product_2",
price: 7893,
category: "program_eq",
qty: 5
}
}
};

_.map(obj, (element, key) => {
console.log(element.item);
while (len) {
let temp = props.shift();
let tempData = [];
if (element.item.hasOwnProperty([temp])) {
tempData.push(element.item[temp]);
} else {
tempData.push("---");
}
final_obj[temp] = tempData;
len--;
}
});
console.log(final_obj);

//
category:["phone"]
name:["Product_1"],
price:[120],
qty:["---"],

最佳答案

您可以使用 reduce() 方法执行此操作,该方法将返回对象并在内部使用 forEach() 循环。

const props = ["name", "price", "qty", "category"];
const obj = {"c1s6c156a1cascascas":{"item":{"name":"Product_1","price":120,"category":"phone"}},"c454asc5515as41cas78":{"item":{"name":"Product_2","price":7893,"category":"program_eq","qty":5}}}

const result = Object.values(obj).reduce((r, e) => {
props.forEach(prop => {
if(!r[prop]) r[prop] = []
r[prop].push(e.item[prop] || null)
})
return r;
}, {})

console.log(result)

关于javascript - 如何从 JavaScript 中的键值对对象创建单个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com