【问题标题】:trouble with json, setting key name by variablejson问题,通过变量设置键名
【发布时间】:2013-04-13 10:18:22
【问题描述】:
var a = { property: ((type == 'files') ? 'id' : ((type == 'folders') ? 'name' : '')) };     // have to create a dummy object property...
return_json[type].push({ a['property']: Content[type][index][a['property']] });

我正在尝试为客户端查询返回一些 JSON,但我需要返回对象的键基于变量,但它不起作用。我的印象是创建一个虚拟对象会起作用,但事实并非如此。

Firefox 告诉我错误,缺少:在第二行的 a['property'] 的属性 ID 之前。

谢谢!


这是所有代码,以备不时之需。是的,它主要是面向对象的。这两个函数用于在 ajax 请求删除文件或用户尝试执行的任何操作之前获取用户选择的文件列表(这是一个文件管理器)。但是对于某些事情,我只想返回每个文件的 ID,而不是整个对象,这就是我在这里遇到问题的地方。对于文件,它需要返回一个“id”,而它应该返回一个文件夹的“名称”。

GetSelectedJSON: function(which = 0, onlyselected = true, justids = false) {            // add another param to only get IDs!

    var return_json = { files: [], folders: [] }

    this.ForEachItem(which, onlyselected, function(index,type) {

        var type = ((type == 1) ? 'files' : ((type == 2) ? 'folders' : function(){ return; }));

        if (justids) {
            var a = { property: ((type == 'files') ? 'id' : ((type == 'folders') ? 'name' : '')) };     // have to create a dummy object property...
            return_json[type].push({ a['property']: Content[type][index][a['property']] });
        } else {
            return_json[type].push(Content[type][index]);
        }           
    });

    return JSON.stringify(return_json);
},

ForEachItem: function(which = 0, onlyselected = true, method = function(index,type){}) {

    if (which == 0 || which == 1) {
        for (var i = 0; i < (onlyselected ? Content.selected.files.length : Content.files.length); i++) {
            method((onlyselected ? Content.selected.files[i] : i),1);
        }
    }

    if (which == 0 || which == 2) {
        for (var i = 0; i < (onlyselected ? Content.selected.folders.length : Content.folders.length); i++) {
            method((onlyselected ? Content.selected.folders[i] : i),2);
        }
    }
},

【问题讨论】:

    标签: javascript json variables object push


    【解决方案1】:

    在对象文字表达式中,: 构造的左侧必须是标识符或字符串常量。它不能是一个表达式,这是你想要做的。

    如果你想要的东西与你所拥有的风格接近,你可以使用匿名函数来构建对象:

      return_json[type].push(function() {
        var obj = {};
        obj[a.property] = Content[type][index][a.property];
        return obj;
      }());
    

    【讨论】:

      猜你喜欢
      • 2022-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多