如何将String转换为对象类型

时间:2013-08-22 15:38:29

标签: javascript ember.js

我正在使用emberjs来寻找东西,但问题是与Ember相关的JS更多。

我有两个变量:var type = "stars"; var term = "5"

我的API中有一个名为stars的属性。

当我这样做时:App.Response.find({stars: term});我找到了结果

但是,当我这样做时:App.Response.find({type: term});找到结果。我希望将其翻译为App.Response.find({stars: term}),因为type的值为"stars"

我假设这是因为type(值为stars)未被理解为哈希键?

2 个答案:

答案 0 :(得分:2)

确实 - 它不会评估对象键。如果您想以[{1}}动态创建该对象,您可以这样做:

{stars:5}

答案 1 :(得分:2)

在对象文字中没有动态的方法来设置对象键。

你必须做

var conditions = {},
    type       = "stars",
    term       = "5";

conditions[type] = term;
App.Response.find(conditions);

如果你发现自己经常使用这种模式,你可以设置类似

的东西
var buildObject = function(key, value) {
  var base = {},
      base[key] = value;
  return base;
};

var type = "stars",
    term = "5";

App.Response.find(buildObject(type, term));

// or directly as
App.Response.find(buildObject("stars", "5"));

最后,让我们让buildObject助手更有用

// accepts [key, value] pairs
var buildObject = function() {
  var base = {};
  for (var i=0; i<arguments.length; i++) {
    base[arguments[i][0]] = arguments[i][1];
  };
  return base;
};

现在我们可以传递多对

App.Response.find(buildObject(["stars", "5"], ["foo", "bar"]));

// equivalent to
App.Response.find({stars: "5", foo: "bar"});