javascript - 关键 checkin 对象

标签 javascript node.js

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

它正在返回:

[ '222', '333' ]

我期望返回:

['333']

为什么它也返回222 id?

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",
    }
]));

编辑:它必须有属性,并且不能为 false bool 值。

最佳答案

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

过滤器使用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",
    }
]));

关于javascript - 关键 checkin 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55482491/

相关文章:

javascript - 为什么我将 JQuery/CSS 代码导入到我的 Wordpress 网站时它不起作用?

javascript - 客户端网页文本翻译(无需互联网连接)

html - 无 Jade express 发电机

javascript - chart.js 响应条形图标签大小

javascript - Express - 获取正在运行的域名服务器

javascript - jquery:运行脚本而不影响具有相同类的 div

node.js - (Chai) assert.isBoolean 不是一个函数——我做错了什么?

javascript - 如果用户之前使用过该操作,如何让 Dialogflow 代理向用户打招呼?

node.js - npm install 失败(在 socketwatcher@0.3.0 install 'node-gyp rebuild' 处)

node.js - 从 Node 镜像运行 docker 容器时找不到 Npm