Javascript 根据允许的项目数组删除JSON项目

Javascript 根据允许的项目数组删除JSON项目,javascript,arrays,json,Javascript,Arrays,Json,我有一个allowedFields数组,它基于表单生成的JSON数组中键的名称 许多检索到的字段在此阶段不是必需的,因此不应经过验证过程,因此我希望将JSON数组的值与allowedFields数组的值相匹配 从表单返回JSON {"reference":"sdfsdfsdfsd", "start_date":"04/22/2014", "end_date":"05//2014", "status":"1","frequency":"M", "day":"sat", "contract_type

我有一个allowedFields数组,它基于表单生成的JSON数组中键的名称

许多检索到的字段在此阶段不是必需的,因此不应经过验证过程,因此我希望将JSON数组的值与allowedFields数组的值相匹配

从表单返回JSON

{"reference":"sdfsdfsdfsd",
"start_date":"04/22/2014",
"end_date":"05//2014",
"status":"1","frequency":"M",
"day":"sat",
"contract_type":"S",
"notice_period":"1M"}

allowedFields = array(
     reference,
     start_date,
     end_date,
     contract_type
)
基本上,我需要去掉allowedFields javascript数组中未列出的任何字段

var all={“reference”:“sdfsd”,
var all = {"reference":"sdfsdfsdfsd",
           "status":"1"};
var allowedFields = ['reference']; // note quote marks to create strings

function filter(data, allowed) {
   var filtered = {};
   for(var id=0; id < allowed.length; ++id) {
      var allowedField = allowed[id];
      if(data.hasOwnProperty(allowedField)) {
         filtered[allowedField] = data[allowedField];
      }
   }
   return filtered;
}

console.log(filter(all, allowedFields));
>> [object Object] {
>>  reference: "sdfsdfsdfsd"
>> }
“状态”:“1”}; var allowedFields=['reference'];//请注意引号以创建字符串 函数过滤器(数据,允许){ var-filtered={}; 对于(变量id=0;id>[对象]{ >>参考:“SDFSD” >> }
1)将JSON解析为一个对象

var obj = JSON.parse(json);
2) 确保已正确定义数组

var allowedFields = ['reference','start_date','end_date','contract_type'];
3) 在对象上循环,如果该键不在数组中,则将其删除

for (var k in obj) {
  if (allowedFields.indexOf(k) < 0) delete obj[k];
}
输出

{"reference":"sdfsdfsdfsd","start_date":"04/22/2014","end_date":"05//2014","contract_type":"S"}

下划线.js解决方案:

_.pick(obj,allowedFields)

还有一个
.omit(obj,string | string[])
的作用正好相反

Underline.js非常有用,我经常使用它,但您也可以选择所需的工具并将其包含在代码中。该库经过了充分优化,无需编写自己的库

这是实现(来自)

\uux.pick=函数(对象、迭代器、上下文){
var result={};
if(u.isFunction(迭代器)){
for(obj中的var键){
var值=obj[键];
if(iterator.call(context,value,key,obj))result[key]=value;
}
}否则{
var keys=concat.apply([],slice.call(参数,1));
for(var i=0,length=keys.length;i
_.pick(obj,allowedFields)
_.pick = function(obj, iterator, context) {
    var result = {};
    if (_.isFunction(iterator)) {
      for (var key in obj) {
        var value = obj[key];
        if (iterator.call(context, value, key, obj)) result[key] = value;
      }
    } else {
      var keys = concat.apply([], slice.call(arguments, 1));
      for (var i = 0, length = keys.length; i < length; i++) {
        var key = keys[i];
        if (key in obj) result[key] = obj[key];
      }
    }
    return result;
  };