我曾经有一个带有一个对象的数组,就像这样:
var myObj = [{'key': {an object}}];
我将其转换为如下对象:
Object.assign({}, ...myobj)
获取此信息:{'key': [{an object}]}
问题在于,现在我在myobj
上有两个具有相同KEY的项目,如下所示:
[{'key': {an object}}, {'key': {another object}}]
如果我执行相同的Object.assign
,我得到的结果是一个对象,其中包含两个其他对象,并且正常:{'key': {an object}}, {'key': {another object}}
问题是我可以将我的myobj
转换为该结构:
{'key': [{an object}, {another object}]}
答案 0 :(得分:0)
您可以使用Array.map()
:
const data = [{'key': 'an object'}, {'key': 'another object'}];
const result = {
key: data.map(o => o.key)
};
console.log(result);
答案 1 :(得分:0)
您可以通过循环对象的条目并用数组替换值来手动合并对象。这是一个可以与两个参数一起使用或在reduce
中使用的合并函数的示例:
const mergeObjects = (obj1, obj2) =>
[...Object.entries(obj1), ...Object.entries(obj2)].reduce(
(merged, [k, v]) => Object.assign(
merged,
{ [k]: (merged[k] || []).concat(v) }
),
{}
);
console.log(mergeObjects({ key: "a"}, { key: "b" }));
console.log(
[
{ key: "a", test: "b" }, { key: "c" }, { key: "d" }
].reduce(mergeObjects)
);
答案 2 :(得分:0)
您可以通过在第一级使用相同的键来合并对象。
function merge(...objects) {
return objects.reduce((a, b) => {
Object.entries(b).forEach(([k, v]) => {
if (!(k in a)) {
return a[k] = v;
}
if (!Array.isArray(a[k])) {
a[k] = [a[k]];
}
a[k].push(v);
});
return a;
}, {});
}
console.log(merge({ key: { foo: 'bar' } }, { key: { foo: 'baz' } }));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:0)
const finalObj = {};
const myObj = [{'key': { obj : "hello"}}, {'key': { obj : "hello"}}, {'key2': {obj : "world"}}, {'key3': {obj : "world"}}];
for( const oj of myObj) {
const key = Object.keys(oj)[0];
if(finalObj[key]){
const tempArray =[].concat(finalObj[key]);
tempArray.push(oj[key]);
finalObj[key] = tempArray
}else{
finalObj[key] = oj[key];
}
}
console.log(finalObj);
Final Output : {"key":[{"obj":"hello"},{"obj":"hello"}],"key2":{"obj":"world"},"key3":{"obj":"world"}}
答案 4 :(得分:0)
您可以使用reduce实现此目的
const obj = [{key: {val: 1}}, {key: {val: 2}}]
const reqObj = obj.reduce((acc, cur) => [...acc, cur.key],[])
console.log('reqObj: ', reqObj)