我有一个对象
{
ids: ['11', '12', '13', '14'],
cat: 1
}
我想将其转换为
[
{ id: '11', cat: 1 },
{ id: '12', cat: 1 },
{ id: '13', cat: 1 },
{ id: '14', cat: 1 }
]
是否可以执行这种单一语法?我们可以为此使用扩展语法吗?
答案 0 :(得分:4)
好吧,这只是map
上方的ids
。
var obj = {
ids: ['11', '12', '13', '14'],
cat: 1
};
console.log(obj.ids.map((x) => {
return {
id: x,
cat: obj.cat
};
}));
答案 1 :(得分:0)
如果具有对象的数组再次调用getCartesian
并构建新的对象,则可以采用递归函数来分离所有键/值对,并通过迭代值来构建新的笛卡尔积。
键的名称必须与结果集中的名称相同。
function getCartesian(object) {
return Object.entries(object).reduce((r, [k, v]) => {
var temp = [];
r.forEach(s =>
(Array.isArray(v) ? v : [v]).forEach(w =>
(w && typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =>
temp.push(Object.assign({}, s, { [k]: x }))
)
)
);
return temp;
}, [{}]);
}
var data = { id: ['11', '12', '13', '14'], cat: 1 };
console.log(getCartesian(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
var test = {
ids: ['11', '12', '13', '14'],
cat: 1
}
// one line
test.ids.map(i => { return {id: i, cat: test.cat} } )