首页 > 解决方案 > Javascript - 仅保留给定所需属性列表的值

问题描述

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

例子:

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;
    };

标签: javascriptarraysjson

解决方案


您可以使用.reduce从当前的键数组构建一个新对象:

const filterObj = (attr, obj) => 
  attr.reduce((acc, key) => (acc[key] = obj[key], acc), {})

console.log(filterObj(['a', 'b', 'c'], {'a': 1, 'b': 2, 'c': 3}));
console.log(filterObj(['a', 'b'], {'a': 1, 'b': 2, 'c': 3}));


推荐阅读