用键将数组转换为对象

时间:2018-10-05 10:55:27

标签: javascript arrays spread-syntax

我有一个对象

{
    ids: ['11', '12', '13', '14'],
    cat: 1
}

我想将其转换为

[
    { id: '11', cat: 1 },
    { id: '12', cat: 1 },
    { id: '13', cat: 1 },
    { id: '14', cat: 1 }
]

是否可以执行这种单一语法?我们可以为此使用扩展语法吗?

3 个答案:

答案 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} } )