将javascript对象格式化为特定结构

时间:2017-12-28 07:47:22

标签: javascript jquery

我有一个javascript对象如下

obj = {"account_id-0":null,"option_item_id-0":1,"value-0":"wer","account_id-1":null,"option_item_id-1":2,"value-1":"kkk","account_id-2":null,"option_item_id-2":3,"value-2":"qqqqq"
....
 "account_id-n":null,"option_item_id-n":6,"value-n":"see"
}

从上面的对象,我需要创建以下结构

{"0": {
        account_id: null,
        option_item_id: 1,
        value: "wer"
      },
 "1": {
        account_id: null,
        option_item_id: 2,
        value: "kkk"
      },
 "2": {
        account_id: null,
        option_item_id: 2,
        value: "qqqqq"
      },
  .
  .
  .
 "n": {
        account_id: null,
        option_item_id: 6,
        value: "see"
      }
}      

关于如何实现这个的任何想法?

3 个答案:

答案 0 :(得分:4)

您可以遍历all the keys,并使用Array#reduce来构建结果对象。

let obj = {
  "account_id-0": null,
  "option_item_id-0": 1,
  "value-0": "wer",
  "account_id-1": null,
  "option_item_id-1": 2,
  "value-1": "kkk",
  "account_id-2": null,
  "option_item_id-2": 3,
  "value-2": "qqqqq",
  "account_id-n": null,
  "option_item_id-n": 6,
  "value-0": "see"
};

let result = Object.keys(obj).reduce((res, item) => {
  let [key, index] = item.split('-');

  if (!res[index]) {
    res[index] = {};
  }

  res[index][key] = obj[item];
  return res;
}, {});

console.log(result);

答案 1 :(得分:1)



var obj = {
  "account_id-0": null,
  "option_item_id-0": 1,
  "value-0": "wer",
  "account_id-1": null,
  "option_item_id-1": 2,
  "value-1": "kkk",
  "account_id-2": null,
  "option_item_id-2": 3,
  "value-2": "qqqqq"
};

var props = [];

function getObj(ind) {
  for (var p in props) {
    if (ind === p) {
      return props[p];
    }
  }
}

for (var prop in obj) {
  var parts = prop.split('-');
  var key = parts[0];
  var indx = parts[1];
  var tmp = getObj(indx);
  if (tmp == undefined) {
    var x = {};
    x[indx] = {};
    x[indx][key] = obj[prop];
    props.push(x);
  } else {
    tmp[indx][key] = obj[prop];
  }
}

console.log(props);




这应该是使用简单的split()函数操纵对象数组的直接方法。

答案 2 :(得分:0)

试试这个:

var keys = Object.keys(obj), i = 0
var arr = [], o = {}
for(var k in keys) {
    if(keys[k].match(/\d*$/m) == i) {
       o[keys[k].replace(/-\d*$/m,'')] = obj[keys[k]]
    } else {
         i++ 
         arr.push(o)
         o = {} 
     }
 }

这里我使用的是一个数组而不是一个带有键“0”,“1”,“2”,......“n”的对象。我认为这样更方便。