首页 > 解决方案 > 键签入对象

问题描述

我编写了一个脚本来检查对象中的任何缺失字段,然后返回缺少字段的项目 ID。

它正在返回:

[ '222', '333' ]

我希望返回:

['333']

为什么它也返回222id ?

function returnMissingData(items) {
    const missing = items.reduce(function(acc, item) {
        const fields = [
            'Cost',
            'Name'
        ];

        for(const key of fields) {
            if (!item[key] || item[key] === undefined) { 
                acc.push(item.Id);
                break;
            }
        }

        return acc;
    }, []);

    return missing;
}


console.log(returnMissingData([
    {
        Id: "111",
        Name: "Name 1",
        Cost: 100,
    },
    {
        Id: "222",
        Name: "Name 2",
        Cost: 0,
    },
    {
        Id: "333",
        Name: "Name 3",
    }
]));

编辑:它必须具有属性,并且不能为布尔值。

标签: javascriptnode.js

解决方案


使用过滤器/映射的替代方法。

过滤器用于Array#some()查找任何丢失的键

function returnMissingData(items) {
      const fields = ['Cost','Name'];
      return items.filter(o => fields.some(k => !(k in o))).map(({Id}) => Id);      
}


console.log(returnMissingData([
    {
        Id: "111",
        Name: "Name 1",
        Cost: 100,
    },
    {
        Id: "222",
        Name: "Name 2",
        Cost: 0,
    },
    {
        Id: "333",
        Name: "Name 3",
    }
]));


推荐阅读