如何将Javascript属性列表转换为对象列表

时间:2017-09-19 13:26:49

标签: javascript

我有一个像这样的属性列表

[{"ID":"0"},{"Day":""},{"Time":""},{"Type":"Both"},{"Status":"false"},
 {"ID":"0"},{"Day":""},{"Time":""},{"Type":"Both"},{"Status":"false"}]

我想将它们转换为类似的东西

[{"ID":"0","Day":"","Time":"","Type":"Both","Status":"false"},
{"ID":"0","Day":"","Time":"","Type":"Both","Status":"false"}]

这是我几乎每次将表单转换为json并将其提交给具有复杂类型的控制器时面临的一个问题。

2 个答案:

答案 0 :(得分:2)

您可以检查对象是否包含密钥ID,并使用以下所有对象构建新对象。

var data = [{ ID: "0" }, { Day: "" }, { Time: "" }, { Type: "Both" }, { Status: "false" }, { ID: "0" }, { Day: "" }, { Time: "" }, { Type: "Both" }, { Status: "false" }],
    result = data.reduce(function (r, o) {
        if ('ID' in o) {
            r.push(Object.assign({}, o));
        } else {
            Object.assign(r[r.length - 1], o);
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

这是一个奇怪的输入,..

以下我假设总有一个ID,它首先出现。由于该数据结构无法拆分属性。

var a = [{"ID":"0"},{"Day":""},{"Time":""},{"Type":"Both"},{"Status":"false"},
 {"ID":"0"},{"Day":""},{"Time":""},{"Type":"Both"},{"Status":"false"}];
 
var 
 ret = [],
 c = null;
a.forEach((r) => {
  if (r.ID) { c = {}; ret.push(c); }
  let k = Object.keys(r)[0];
  c[k] = r[k];
});

console.log(ret);