我有一个包含以下元素的数组。我正在尝试从数组
创建一个对象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
}
答案 0 :(得分:3)
match
优于split
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;
答案 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))