【问题标题】:How to check if array contains specific object [duplicate]如何检查数组是否包含特定对象[重复]
【发布时间】:2019-01-12 16:25:46
【问题描述】:

我正在尝试检查对象数组是否包含特定对象或具有特定属性的对象。

var mainArray = [
{name:"Yahya", age:"29"},
{name:"Ahmed", age:"19"},
{name:"Mohamed", age:"10"},
{name:"Ali", age:"32"},
{name:"Mona", age:"25"},
{name:"Shady", age:"62"},
{name:"Reem", age:"11"},
{name:"Marwa", age:"52"}
]

var myObject = {name:"Yahya", age:"29"};

function check() {
if (mainArray.indexOf(myObject) > -1) {
  console.log("true")
  return true;
} else {
  console.log('false')
  return false;
}
};
<button onClick="check()">Check</button>

然而,这里的对象与数组对象之一相同。但它返回 false 。 我试过包含,也没有工作。

【问题讨论】:

    标签: javascript arrays javascript-objects indexof


    【解决方案1】:

    如果您想检查对象数组是否包含该特定对象,则可以使用Array.some

    var mainArray = [{
        name: "Yahya",
        age: "29"
      },
      {
        name: "Ahmed",
        age: "19"
      },
      {
        name: "Mohamed",
        age: "10"
      },
      {
        name: "Ali",
        age: "32"
      },
      {
        name: "Mona",
        age: "25"
      },
      {
        name: "Shady",
        age: "62"
      },
      {
        name: "Reem",
        age: "11"
      },
      {
        name: "Marwa",
        age: "52"
      }
    ]
    
    var myObject = {
      name: "Yahya",
      age: "29"
    };
    
    let ans = mainArray.some(function(arrVal) {
      return myObject.name === arrVal.name;
    });
    console.log(ans)

    您也可以使用filter 方法。在这种情况下,它将返回匹配元素的数组。检查返回数组的长度以验证它是否包含所需的元素

    var mainArray = [{
        name: "Yahya",
        age: "29"
      },
      {
        name: "Ahmed",
        age: "19"
      },
      {
        name: "Mohamed",
        age: "10"
      },
      {
        name: "Ali",
        age: "32"
      },
      {
        name: "Mona",
        age: "25"
      },
      {
        name: "Shady",
        age: "62"
      },
      {
        name: "Reem",
        age: "11"
      },
      {
        name: "Marwa",
        age: "52"
      }
    ]
    
    var myObject = {
      name: "Yahya",
      age: "29"
    };
    
    let newAns = mainArray.filter(function(item) {
      return item.name === myObject.name && item.age === myObject.age
    })
    if (newAns.length > 0) {
      console.log(true);
    } else {
      console.log(false)
    }

    【讨论】:

      【解决方案2】:

      findIndex 给出了一个Array 方法,我们可以像下面这样简单地做一些事情

      var mainArray = [
        {name:"Yahya", age:"29"},
        {name:"Ahmed", age:"19"},
        {name:"Mohamed", age:"10"},
        {name:"Ali", age:"32"},
        {name:"Mona", age:"25"},
        {name:"Shady", age:"62"},
        {name:"Reem", age:"11"},
        {name:"Marwa", age:"52"}
      ]
      
      var myObject = {name:"Yahya", age:"29"};
      
      function check() {
        if (mainArray.findIndex(obj => obj.name == myObject.name && obj.age == myObject.age) > -1) {
          console.log("true")
          return true;
        } else {
          console.log('false')
          return false;
        }
      };
      <button onClick="check()">Check</button>

      【讨论】:

        【解决方案3】:

        您可以检查该数组的some 元素是否与您在字符串化时检查的对象相同,如下所示:

        mainArray.some(e => JSON.stringify(e) === JSON.stringify(myObject))
        

        function check() {
         console.log(mainArray.some(e => JSON.stringify(e) === JSON.stringify(myObject)))
        };
        
        
        let mainArray = [{
            name: "Yahya",
            age: "29"
          },
          {
            name: "Ahmed",
            age: "19"
          },
          {
            name: "Mohamed",
            age: "10"
          },
          {
            name: "Ali",
            age: "32"
          },
          {
            name: "Mona",
            age: "25"
          },
          {
            name: "Shady",
            age: "62"
          },
          {
            name: "Reem",
            age: "11"
          },
          {
            name: "Marwa",
            age: "52"
          }
        ]
        
        let myObject = {
          name: "Yahya",
          age: "29"
        };
        <button onClick="check()">Check myObject</button>

        【讨论】:

          【解决方案4】:

          indexOf 将尝试使用基本比较机制在集合中查找对象。尝试运行: {name:"Yahya", age:"29"} === {name:"Yahya", age:"29"} 在 javascript 控制台中,你会得到错误,因为它们是 2 个不同的对象,使用相同的字符串文字创建。

          我认为您应该阅读更多关于 OOP 中对象的信息。

          要使用 Array.prototype.some() 提供的测试器函数检查集合是否包含元素:

          var mainArray = [
              {name:"Yahya", age:"29"},
              {name:"Ahmed", age:"19"},
              {name:"Mohamed", age:"10"},
              {name:"Ali", age:"32"},
              {name:"Mona", age:"25"},
              {name:"Shady", age:"62"},
              {name:"Reem", age:"11"},
              {name:"Marwa", age:"52"}
          ];
          
          var myObject = {name: "Yahya", age: "29"};
          
          function check(object) {
              return mainArray.some(function(element) {
                  return element.name === object.name && element.age === object.age;
              })
          }
          
          console.log(check(myObject));

          请注意,比较是使用“===”完成的,如果您在 mainArray 集合中将年龄设置为字符串并且在 myObject - 作为数字,请改用“==”进行年龄比较。

          【讨论】:

            猜你喜欢
            • 2015-03-15
            • 2019-08-24
            • 2019-10-01
            • 2020-11-29
            • 2019-10-03
            • 1970-01-01
            • 1970-01-01
            • 2020-06-07
            • 2015-06-24
            相关资源
            最近更新 更多