【问题标题】:checking property an object with a nested array of objects检查具有嵌套对象数组的对象的属性
【发布时间】:2020-06-21 15:33:25
【问题描述】:

我有一个对象,像这样

var obj = {
  page: 6,
  total: 12,
  data: [
    {
      id: 1,
      email: "lawson@mail.com",
      last_name: "Larsen",
    },
    {
      id: 2,
      email: "howell@mail.com",
      last_name: "Holl",
    },
  ],
  ad: {
    company: "Weekly",
  },
};

我想检查这个请求对象是否包含字段电子邮件。我试着这样做

var i = obj.data.length;
while (i--) {
  console.log(obj.data.hasOwnProperty("email"));
}

但它并没有让我恢复真实

【问题讨论】:

  • 数据是一个数组而不是对象。而是做 obj.data[0].hasOwnProperty("email");

标签: javascript node.js object


【解决方案1】:

您可以这样做来检查电子邮件属性是否存在于数据数组中。

obj.data.some((obj)=>hasOwnProperty('email'))

【讨论】:

    【解决方案2】:

    为了让它工作,你必须遍历数组,或者访问一些数组索引。

    您的代码将是:

    console.log(obj.data[0].hasOwnProperty('email'));
    

    注意零索引访问。

    【讨论】:

      【解决方案3】:

      您需要使用索引访问数据中的每个对象..

      while (i--) {
          console.log(obj.data[i].hasOwnProperty('email')); 
      }
      
      
      

      【讨论】:

        【解决方案4】:

        假设 'data' 是一个数组,我们可以使用 foreach 遍历数据集,然后找到 'email' 属性

        var obj = {
          page: 6,
          total: 12,
          data: [
            {
              id: 1,
              email: "lawson@mail.com",
              last_name: "Larsen",
            },
            {
              id: 2,
              email: "howell@mail.com",
              last_name: "Holl",
            },
          ],
          ad: {
            company: "Weekly",
          },
        };
        
        obj.data.forEach(data => {
          console.log(data.hasOwnProperty('email'))
        })

        【讨论】:

          【解决方案5】:
          // Check all using loop For Each
          obj.data.forEach( (item) => console.log( item.hasOwnProperty('email') ) );
          
          // Check whether some objects in data have property 'email'
          console.log( obj.data.some( (item) => item.hasOwnProperty('email') ) );
          
          // Check whether every objects in data have property 'email'
          console.log( obj.data.every( (item) => item.hasOwnProperty('email') ) );
          

          【讨论】:

            【解决方案6】:

            为此目的有一个特殊的数组方法。 every

            const response = {
              page: 6,
              total: 12,
              data: [
                {
                  id: 1,
                  email: "lawson@mail.com",
                  last_name: "Larsen",
                },
                {
                  id: 2,
                  email: "howell@mail.com",
                  last_name: "Holl",
                },
              ],
              ad: {
                company: "Weekly",
              },
            };
            const hasEmail = (item) => Boolean(item.email);
            
            const everyItemHasEmail = response.data.every(hasEmail);
            
            console.log(everyItemHasEmail)

            【讨论】:

              猜你喜欢
              • 2022-06-30
              • 2021-10-27
              • 2013-07-03
              • 1970-01-01
              • 2023-03-26
              • 2022-08-04
              • 2016-08-29
              • 1970-01-01
              • 2018-05-27
              相关资源
              最近更新 更多