【问题标题】:Creating custom object from array从数组创建自定义对象
【发布时间】:2015-05-15 14:35:17
【问题描述】:

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

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
    }

【问题讨论】:

    标签: javascript arrays json node.js


    【解决方案1】:

    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));

    【讨论】:

    • 感谢大家帮助我。现在我得到了预期的输出。是否可以将值设为 Object 而不是字符串 ({ qty: { $lt: 20 } })。 { "action": "find", "value": "{ qty: { $lt: 20 } }", "limit": 5, "skip": 0 }
    • @user4324324 如果它可以帮助您解决问题,请考虑接受答案。
    • @mish 您的代码可以运行,但存在一个重大缺陷。 { "action": "find", "value": "{ qty: { $lt: 20 } }", "limit": "5", "skip": "0" } 值正在转换为字符串。例如。 “限制”:5
    • @user4324324:我没有回答——你指的是谁的代码?
    • @mish 我的错误。我为此道歉。 :)
    【解决方案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))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 2018-01-09
      • 2016-02-20
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多