【问题标题】:Convert array to object with key使用键将数组转换为对象
【发布时间】:2019-03-10 20:50:48
【问题描述】:

我有一个对象

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

我想把它转换成

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

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

【问题讨论】:

  • 那不是 JSON。

标签: javascript arrays spread-syntax


【解决方案1】:

嗯,这只是map 上的ids

var obj = {
  ids: ['11', '12', '13', '14'],
  cat: 1
};
console.log(obj.ids.map((x) => {
  return {
    id: x,
    cat: obj.cat
  };
}));

【讨论】:

    【解决方案2】:

    如果带有对象的数组再次调用 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; }

    【讨论】:

      【解决方案3】:
      var test = {
        ids: ['11', '12', '13', '14'],
        cat: 1
      }
      
      // one line
      test.ids.map(i => { return {id: i, cat: test.cat} } )
      

      【讨论】:

        猜你喜欢
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2021-02-14
        • 1970-01-01
        • 2021-11-03
        相关资源
        最近更新 更多