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

时间:2017-07-27 10:52:00

标签: javascript 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);
  });   
});

6 个答案:

答案 0 :(得分:8)

你应该知道的第一件事是,在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});

答案 1 :(得分:2)

试试这个:

struct
  

在   find()   如果数组中有元素,则method返回数组中的值   满足提供的测试功能。否则未定义   返回。

     

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

 <rewrite>
  <rules>
    <rule name="fixdata" stopProcessing="true">
      <match url="\?(.*)\?(.*)$"  ignoreCase="false" />
      <action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}&{R:2}" />
    </rule>
  </rules>
</rewrite>  
  

如果您想获得if(myArray.find(x => x.input === input)){ console.log("Exist"); } else{ anotherarray.push({'input':input}); } 属性的数组,您可以这样做   这个   map()   方法:

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

答案 2 :(得分:0)

你应该只使用 includes 数组方法 array.includes(某些值),然后如果它不包含,则返回一个你可以推送的bool。注意这是普通的Javascript。 Array includes method

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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});
    }
 });

答案 5 :(得分:0)

indexOf适用于字符串,但要检查数组,你不能简单地使用它。

其他方法可能是迭代整个数组并检查,但就时间复杂度而言,这将是非常昂贵的。

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

$('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'); 


});   
});