我有这样的情况:我正在推送对象新的键值
对,例如:
let a1 = {key1: 'val1'};
let a2 = {key2: 'val2'};
const result = {...a1, ...a2};
结果我得到了一个有效的新对象:{key1: 'val1', key2: 'val2'}
。
但是还有第三种情况:
let a1 = {key1: 'val1'};
let a2 = {key2: 'val2'};
let b1 = {key1: 'val1b'};
const result = {...a1, ...a2, ...b1};
结果我应该得到:
{key1: ['val1', 'var1b'], key2: 'val2'}`.
so -> 如果已经存在这样的键 -> 将此键值转换为数组并推送它们。
我尝试过:
对于...我要推送的所有对象:
const keysToPush = Object.keys(b1);
const keysInitial = Object.keys(a1); // foreach too
if (keysInitial.includes(keysToPush)) // push as array
但是看起来很丑
也许应该有更优雅的解决方案?
最佳答案
检查 key 是否存在。如果是,检查它是否是一个数组,并相应地处理每种情况:
let a1 = {
key1: 'val1'
};
let a2 = {
key2: 'val2'
};
let b1 = {
key1: 'val1b'
};
const merge = (...o) => {
let res = o.reduce((acc, curr) => {
Object.entries(curr).forEach(([k, v]) => {
acc[k] = (acc[k] && Array.isArray(acc[k]) ? [...acc[k], v] : (acc[k] ? [acc[k], v] : v));
});
return acc;
});
return res;
};
let result = merge(a1, a2, b1);
console.log(result);
.as-console-wrapper {
max-height: 100% !important;
top: auto;
}
关于javascript - 将对象与新值连接起来并将其转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55899159/