繁体   English   中英

如何使用jQuery检查数组中的对象值是否已存在

[英]How to check if object value in array already exists using jquery

如何检查数组中已经存在的对象值? 如果不推送值

小提琴: https : //jsfiddle.net/h9zctLqz/

的HTML:

<form>
  <input type="text" id="input" name="input">
  <button type="button" name="save">save</button>
</form>

jQuery的:

$('document').ready(function(){
    $myData = [];

    $('button[name=save]').on('click', function(){
        var input = $('#input').val();
            $myData.indexOf({'input':input}) === -1 ? $myData.push({'input':input}) : console.log('already exists');
      console.log($myData);
  });   
});

您应该知道的第一件事是,在javascript中:

({ 'input': input} === { 'input': input }) // returns false

===比较对象引用,而不是对象的外观。

这意味着indexOf({input: input})永远不会返回-1。

您可以使用some解决此问题。 some需要一个函数来比较事物,因此您可以编写自己的“等于”(而不是使用===indexOf )。

if ($myData.some(item => item.input === input)) console.log("exists")
else $myData.push({input: input});

尝试这个 :

if(myArray.find(x => x.input === input)){
console.log("Exist");
} else{
anotherarray.push({'input':input});
}

如果数组中的元素满足提供的测试功能,则find()方法将在数组中返回一个值。 否则返回undefined。

如果要获取匹配元素的数组,请改用filter()方法:

myArray.filter(x => x.id === input)

如果要获取another property数组,可以使用map()方法执行此操作:

myArray.filter(x => x.id === input).map(x => x.anotherproperty)

您应该只使用include数组方法array.includes(一些值) ,然后,如果不包括include则返回布尔值,您可以按下。 请注意,这是纯Javascript。 数组包含方法

 let array = [1, 2, 3, 4, 5]; console.log(array) if (array.includes(2)) { array.push(20); } console.log(array) 

这些对象将具有两个不同的引用,因此它将始终返回false。 使用.some或.find并对.input字段进行值比较。

const itemExists = $myData.some(el => el.input === input);
if(itemExists) {
   console.log("Already exsists");
} 
else {
   $myData.push({'input':input})
}

看起来像是哈希表的完美用例:

var hash={},result=[];

$('button[name=save]').on('click', function(){
    var input = $('#input').val();
    if(hash[input]){
      hash[input].quantity++;
    }else{
      result.push(hash[input]={input,quantity:1});
    }
 });

indexOf与Strings配合良好,但要检查数组中的内容,您不能简单地使用它。

其他方法可能是遍历整个数组并进行检查,但是在时间复杂度方面这将是非常昂贵的。

因此,最好的答案是在这种情况下使用简单的地图。 尝试以下-

$('document').ready(function(){ 
var myData = new Object(); // or var map = {};

$('button[name=save]').on('click', function(){
    var input = $('#input').val(); 
        if(myData[input] != input) 
            myData[input] = input;
        else
          console.log('already exists'); 


});   
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM