首页 > 解决方案 > 如何获取 javascript 对象属性的子集,不包括未定义或空属性

问题描述

我可以有不同版本的对象:

myObject1 = { 
  color: 'red',
  size : 'big',
  name : 'Beautiful red',
  count: 2
};

myObject2 = { 
  color: 'blue',
  name : 'Awesome blue',
  count : null
};

我需要一个助手来只保留我想要并且存在的价值:

function myHelper() {
   ?????
}


myHelper(myObject1, ['color','size','count']) // => { color: 'red', size : 'big', count:2}
myHelper(myObject2, ['color','size','count']) // => { color: 'blue'}

有人已经创建了吗?

标签: javascriptclonehelper

解决方案


将对象转换为条目并通过以下方式过滤:

  • 对象属性 ( key) 存在于所需的键列表 ( props)中
  • 值 ( val) 不是null

const myObject1 = { 
  color: 'red',
  size : 'big',
  name : 'Beautiful red',
  count: 2
};

const myObject2 = { 
  color: 'blue',
  name : 'Awesome blue',
  count : null
};

function myHelper(obj, props) {
  return Object.fromEntries(Object.entries(obj)
    .filter(([key, val]) => props.includes(key) && val != null));
}

console.log(myHelper(myObject1, ['color','size','count']));
console.log(myHelper(myObject2, ['color','size','count']));
.as-console-wrapper { top: 0; max-height: 100% !important; }

如果要优化这一点,可以通过以下方式将“数组包含”更改为“集合包含”检查:

const myHelper = (obj, props) => (pSet => Object.fromEntries(Object.entries(obj)
    .filter(([key, val]) => pSet.has(key) && val != null)))
(new Set(props));

推荐阅读