从数组创建自定义对象

时间:2015-03-13 07:12:13

标签: javascript arrays json node.js

我有一个包含以下元素的数组。我正在尝试从数组

创建一个对象
var arr = [
  'find({ qty: { $lt: 20 } } )',
  'limit(5)',
  'skip(0)'
]

以下是我的代码。我只获得值作为输出。任何有关这方面的帮助都会有所帮助

for (var i = 0; i < arr.length; i++) {
        var res = arr[i].search(/\(/ig)
        if (res!= -1) {
            var result = arr[i].split("(");
            result = result[1].slice(0, -1))
        }
    }

预期输出

 {
      "action": "find",
      "value": "{ qty: { $lt: 20 } }",
      "limit": 5,
      "skip": 0
    }

2 个答案:

答案 0 :(得分:3)

对于这类内容,

match优于split

&#13;
&#13;
var arr = [
  'find({ qty: { $lt: 20 } } )',
  'limit(5)',
  'skip(0)'
]


var obj = {};

arr.forEach(function(x, n) {
  var m = x.match(/(\w+)\(\s*(.+?)\s*\)/);
  if(n == 0) {
    obj.action = m[1];
    obj.value = m[2];
  } else
    obj[m[1]] = m[2];
    
});

document.write("<pre>" + JSON.stringify(obj,0,3));
&#13;
&#13;
&#13;

答案 1 :(得分:2)

请参阅此fiddle

检查元素是否在数组中是第一个,如果是,则将操作和值键设置为拆分数组,否则只需将拆分值分配给键和值

var arr = [
  'find({ qty: { $lt: 20 } } )',
  'limit(5)',
  'skip(0)'
]
var result = {};
for (var i = 0; i < arr.length; i++) {
  var res = arr[i].split("(")
  console.log(res)
  result[res[0]] = res[1].split(')')[0]
}

document.write(JSON.stringify(result))