如何使用字符串作为选择器在对象中设置数据?

How can I set data in object using a string as the selector?

假设我有一个全局对象,只能从一个只接受字符串的函数访问。

下面是函数内部定义的。

function setItem(string, val) {

    var scope = [{
      apple : true, 
      test : 'aa'  
    },{
      apple : false,
      test : 'bb'
    }];
    var obj = {
        'deep' : scope
    }
    obj.string = val;
    return obj.string;
});

现在我想获取第一个项目,以及覆盖数据。

setItem('scope[0].apple', 'apple is off');

显然上面的方法在尝试设置变量时不起作用,但我想知道是否有一种方法可以评估可以包含点标记和索引选择器的字符串值?

可以用eval来完成。

function setItem(string, val) {
  var scope = [{
    apple: true,
    test: 'aa'
  }, {
    apple: false,
    test: 'bb'
  }];
  var obj = {
    'deep': scope
  }
  eval(string + ' = ' + JSON.stringify(val));
  return eval(string);
};
alert(setItem('scope[0].apple', 'apple is off'));