Javascript-仅保留给定所需属性列表的值

Javascript-仅保留给定所需属性列表的值,javascript,arrays,json,Javascript,Arrays,Json,我需要一个函数,给定一个属性列表,只保留该键在列表中存在的值 示例: attrs = ['a', 'b', 'c'] obj = {'a': 1, 'b': 2, 'c': 3} return = {'a': 1, 'b': 2, 'c': 3} attrs = ['a', 'b'] obj = {'a': 1, 'b': 2, 'c': 3} return = {'a': 1, 'b': 2} 到目前为止,我已经做到了这一点,但并没有达到预期效果: this.keepKnownAttrib

我需要一个函数,给定一个属性列表,只保留该键在列表中存在的值

示例:

attrs = ['a', 'b', 'c']
obj = {'a': 1, 'b': 2, 'c': 3}
return = {'a': 1, 'b': 2, 'c': 3}

attrs = ['a', 'b']
obj = {'a': 1, 'b': 2, 'c': 3}
return = {'a': 1, 'b': 2}
到目前为止,我已经做到了这一点,但并没有达到预期效果:

this.keepKnownAttributes = function(attrs, obj) {
        let ret = {};
        attrs.forEach((attr) => {
            if(obj.hasOwnProperty(attr)){
                Object.assign(ret, {attr: obj[attr]});
            }
        });
        return ret;
    };
使用.hasOwnProperty方法。如果对象具有该属性,则返回true

var attrs=['a','b'] var obj={ "a":1,, “b”:2, c:3 } var obj1={}; attrs.forEache=>obj.hasOwnPropertye?obj1[e]=obj[e]:false console.logobj1使用.hasOwnProperty方法。如果对象具有该属性,则返回true

var attrs=['a','b'] var obj={ "a":1,, “b”:2, c:3 } var obj1={}; attrs.forEache=>obj.hasOwnPropertye?obj1[e]=obj[e]:false console.logobj1您可以使用Object.key和.reduce方法:

常量属性1=['a','b','c'] 常量obj1={a':1,'b':2,'c':3} 常量属性2=['a','b'] 常量obj2={a':1,'b':2,'c':3} 常量filterbj=arr,obj=>Object.keysobj .filterk=>arr.includesk .reducer,c=>r[c]=obj[c],r,{} console.logfilterObjattrs1,obj1; console.logfilterObjattrs2,obj2 您可以使用Object.keys和.reduce方法:

常量属性1=['a','b','c'] 常量obj1={a':1,'b':2,'c':3} 常量属性2=['a','b'] 常量obj2={a':1,'b':2,'c':3} 常量filterbj=arr,obj=>Object.keysobj .filterk=>arr.includesk .reducer,c=>r[c]=obj[c],r,{} console.logfilterObjattrs1,obj1;
console.logfilterObjattrs2,obj2 您可以遍历对象的所有键,并将它们存储到包含要删除的键的数组中。稍后,您可以使用delete简单地删除对象的属性。使用Object.keysobj可以获得包含所有键的列表

属性1=['a','b','c'] obj1={ "a":1,, “b”:2, c:3 } 属性2=['a','b'] obj2={ "a":1,, “b”:2, c:3 } keepKnownAttributes=函数trs,obj{ 让keystelete=[]; Object.keysobj.forEachkey=>{ 如果!attrs.includeskey{ keystelete.pushkey; } }; keystedelete.forEachkey=>{ 删除obj[key]; }; 返回obj; }; console.logkeepknow属性属性属性1,obj1;
console.logkeepknownatributesattrs2,obj2 您可以遍历对象的所有键,并将它们存储到包含要删除的键的数组中。稍后,您可以使用delete简单地删除对象的属性。使用Object.keysobj可以获得包含所有键的列表

属性1=['a','b','c'] obj1={ "a":1,, “b”:2, c:3 } 属性2=['a','b'] obj2={ "a":1,, “b”:2, c:3 } keepKnownAttributes=函数trs,obj{ 让keystelete=[]; Object.keysobj.forEachkey=>{ 如果!attrs.includeskey{ keystelete.pushkey; } }; keystedelete.forEachkey=>{ 删除obj[key]; }; 返回obj; }; console.logkeepknow属性属性属性1,obj1; console.logkeepknownatributesattrs2,obj2 你可以用和来做。首先过滤掉属性中存在的键,然后返回包含过滤键及其值的新对象

设obj={'a':1,'b':2,'c':3} 函数removeobj,attrs{ return Object.keysobj.filtera=>attrs.includesa.reduceac,a=>{ ac[a]=obj[a]; 返回ac; },{} } console.logremoveobj,['a','b','c']; console.logremoveobj,['a','b'] 你可以用和来做。首先过滤掉属性中存在的键,然后返回包含过滤键及其值的新对象

设obj={'a':1,'b':2,'c':3} 函数removeobj,attrs{ return Object.keysobj.filtera=>attrs.includesa.reduceac,a=>{ ac[a]=obj[a]; 返回ac; },{} } console.logremoveobj,['a','b','c']; console.logremoveobj,['a','b'] 您可以使用:

作为泛型函数,将如下所示:

const filterAttrsFrom = (target, attrs) =>
  attrs.reduce((acc, key) => 
    (acc[key] = target[key], acc)
  , {});
您可以使用:

作为泛型函数,将如下所示:

const filterAttrsFrom = (target, attrs) =>
  attrs.reduce((acc, key) => 
    (acc[key] = target[key], acc)
  , {});
可以使用从当前的键数组生成新对象:

常量过滤器对象=属性,对象=> attr.reduceacc,key=>acc[key]=obj[key],acc,{} logfilterObj['a','b','c'],{'a':1,'b':2,'c':3}; logfilterObj['a','b'],{'a':1,'b':2,'c':3} 可以使用从当前的键数组生成新对象:

常量过滤器对象=属性,对象=> attr.reduceacc,key=>acc[key]=obj[key],acc,{} logfilterObj['a','b','c'],{'a':1,'b':2,'c':3}; logfilterObj['a','b'],{'a':1,'b':2,'c':3} 只需使用并传入一个空对象。在每次迭代中,只需将属性从obj复制到累加器,然后返回它

下面的版本添加属性中存在的所有元素

功能测试{ 返回属性还原函数累加器,currentValue{ 累加器[当前值]=对象[当前值]; 回流蓄能器; }, {}; } logtest['a','b','c'],{'a':1,'b':2,'c':3}; 控制台 e、 logtest['a','b'],{'a':1,'b':2,'c':3}; logtest['a','b','c'],{'a':1,'b':2} 只需使用并传入一个空对象。在每次迭代中,只需将属性从obj复制到累加器,然后返回它

下面的版本添加属性中存在的所有元素

功能测试{ 返回属性还原函数累加器,currentValue{ 累加器[当前值]=对象[当前值]; 回流蓄能器; }, {}; } logtest['a','b','c'],{'a':1,'b':2,'c':3}; logtest['a','b',{'a':1,'b':2,'c':3}; logtest['a','b','c'],{'a':1,'b':2} 这也行得通-

函数someNameattrs,obj{ 设newObj={}; 对于obj中的var对象{ 如果attrs.includeObject{ newObj[object]=obj[object]; } } 返回newObj } logsomeName[a,b],{a:1,b:2,c:3} 这也行得通-

函数someNameattrs,obj{ 设newObj={}; 对于obj中的var对象{ 如果attrs.includeObject{ newObj[object]=obj[object]; } } 返回newObj }
logsomeName[a,b],{a:1,b:2,c:3};如果ATTR中存在的值在obj中不存在,是否应将其忽略或添加为未定义?如果ATTR中存在的值在obj中不存在,是否应将其忽略或添加为未定义?不确定为什么每次都需要创建新对象并分散关键点。您只需执行acc[key]=obj[key];返回acc;不确定为什么每次都需要创建新对象并传播关键点。您只需执行acc[key]=obj[key];返回acc;