计算每个 object.entry 的长度属性

IT技术 javascript arrays reactjs lodash
2021-05-03 07:30:07

所以我希望能够计算数组中每个对象内的属性数量......

    value = [
   0: { personId: "0003678", seniorStatus: "Yes", juniors: "maybe" }, //3
   1: { personId: "0001657", seniorStatus: "No", juniors: "No" }, //3
   2: { personId: "0002345", seniorStatus: "No", juniors: "No", infants: "Maybe" } //4

基本上我想这样做来检查变化。如果任何对象中的属性超过 3 个。我知道如何计算对象的数量,在这种情况下有 3 个。但需要计算其中的属性。如果超过 3 则返回 true。

我正在努力寻找任何超越对象计数问题的东西。如果对答案有用,我正在使用 lodash。

2个回答

将数组映射Object.keys()每个对象的长度并检查是否大于 3:

const values = [{"personId":"0003678","seniorStatus":"Yes","juniors":"maybe"},{"personId":"0001657","seniorStatus":"No","juniors":"No"},{"personId":"0002345","seniorStatus":"No","juniors":"No","infants":"Maybe"}]
   
const result = values.map(o => Object.keys(o).length > 3)

console.log(result)

或者使用 lodash's_.size()来获取每个对象中的属性数量,然后检查 3 是否小于数量_.lt()

const values = [{"personId":"0003678","seniorStatus":"Yes","juniors":"maybe"},{"personId":"0001657","seniorStatus":"No","juniors":"No"},{"personId":"0002345","seniorStatus":"No","juniors":"No","infants":"Maybe"}]
   
const result = values.map(_.flow(
  _.size,
  _.partial(_.lt, 3)
))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

将此视为Ori Drori方法的扩展如果您需要获取具有多于N 个键的对象,您可以像这样使用filter()

const input = [
  {personId:"0003678", seniorStatus:"Yes", juniors:"maybe" },
  {personId:"0001657", seniorStatus:"No", juniors:"No" },
  {personId:"0002345", seniorStatus:"No", juniors:"No", infants:"Maybe"}
];
  
const filterObj = (objs, numProps) =>
{
    return objs.filter(o => Object.keys(o).length > numProps);
}
  
console.log("Objs with more than 3 props: ", filterObj(input, 3));
console.log("Objs with more than 2 props: ", filterObj(input, 2));