0

我需要根据动态模板过滤 JSON 对象的属性和值(出于安全原因)。这就像通过仅在运行时才知道的掩码查看 JSON 对象。

假设我有这个 JSON 对象:

{ "id": "1",
  "foo": [ "1", "2", "3" ],
  "bar": [ "a", "b", "c"],
  "fuzz": [ "y", "x" ]
}

这个模板:

{ "id": "",
  "fuzz": [ "y", "z"],
  "foo": ""
}

现在我想得到以下结果(将模板应用到对象上):

{ "id": "1",
  "fuzz": [ "y" ],
  "foo": [ "1", "2", "3" ]
}

过滤的最佳解决方案是什么

  1. 只有属性(保持值不变)?
  2. 属性和值(如上面的示例)?

笔记:

  • 模板和对象之间的属性和值的顺序可能不同
  • 我的环境是 NodeJS + BackboneJS
  • A 有很多对象要过滤,所以性能很重要
4

2 回答 2

0

根据 WiredPrairie 的建议,我将 _.pick() 和 _.intersection() 重写为以下方法:

// Loosely based on Underscore.js _.pick() method
function project(obj, tmp) {
    var copy = {};
    var keys = _.keys(tmp);
    _.each(keys, function(key) {
        if (key in obj) {
            var vals = tmp[key];
            if (Array.isArray(vals)) {
                var copy_vals = [];
                // Next lines could be replaced by:
                // cvals = _.intersection(vals, obj[key]);
                _.each(vals, function(val) {
                    if ($.inArray(val, obj[key])!=-1) {
                        copy_vals.push(val);
                    };
                });
                copy[key] = copy_vals;
            } else {
                copy[key] = obj[key];
            };
        };
    });
    return copy;
}
于 2013-03-16T21:09:58.003 回答
-1

我不确定,但你可以尝试阅读这个jQuery.extend

于 2013-03-16T09:25:05.877 回答