2016-09-16 65 views
0

我有一個包含對象的數組。我試圖找出該數組是否缺少一個ID。我正在使用的代碼是返回部分匹配,例如允許「1」匹配「10」,「11」,「12」,「13」等。如果我迭代爲字符串,或者將搜索項和id都轉換爲數字,就會發生這種情況。例如下面的代碼:jQuery inArray和Javascript IndexOf返回部分匹配。我需要檢查完整匹配

var loadUserTemplate = function(json){ 
    var firstArray = json[0]; 
    var parsed = (JSON.parse(firstArray)); 
    var gridStack = $('.grid-stack-item'); 
    var plength = parsed.length; 

    gridStack.each(function(index){ 
     var gridstackId = Number($(this).attr('data-custom-id')); 

     for(var j=0; j < plength; j++){ 
      var doesNotContain = Number(parsed[j].id.indexOf(gridstackId)); 
      console.log(typeof doesNotContain); 
      if(doesNotContain === -1){ 
       console.log(gridstackId + " is not in " + parsed[j].id); 
      } 
     } 
} 

生成此在的console.log(我只包括第一個數字,注意它是如何發現1在10 - 19):

number 
1 is not in 2 
number 
1 is not in 3 
number 
1 is not in 4 
number 
1 is not in 5 
number 
1 is not in 6 
number 
1 is not in 8 
number 
1 is not in 9 
number 
1 is not in 20 
number 
1 is not in 22 
number 
1 is not in 23 
number 
1 is not in 24 
number 
1 is not in 25 
number 
1 is not in 26 

我已經試過的jQuery (inArray)和indexOf具有相同的結果。我如何找到完整匹配,而不是部分匹配?

更新:解析是firstArray解析它是:

[{"x":"0","y":"0","width":"12","height":"5","id":"1"},{"x":"0","y":"5","width":"6","height":"2","id":"2"},{"x":"6","y":"5","width":"6","height":"2","id":"3"},{"x":"0","y":"7","width":"6","height":"2","id":"4"},{"x":"6","y":"7","width":"6","height":"2","id":"5"},{"x":"0","y":"9","width":"12","height":"8","id":"6"},{"x":"0","y":"17","width":"4","height":"6","id":"8"},{"x":"4","y":"17","width":"4","height":"6","id":"9"},{"x":"8","y":"17","width":"4","height":"6","id":"10"},{"x":"0","y":"23","width":"4","height":"6","id":"11"},{"x":"4","y":"23","width":"4","height":"6","id":"12"},{"x":"8","y":"23","width":"4","height":"6","id":"13"},{"x":"0","y":"29","width":"6","height":"8","id":"14"},{"x":"6","y":"29","width":"6","height":"8","id":"15"},{"x":"0","y":"37","width":"4","height":"6","id":"16"},{"x":"4","y":"37","width":"4","height":"6","id":"17"},{"x":"8","y":"51","width":"4","height":"6","id":"18"},{"x":"0","y":"43","width":"4","height":"6","id":"19"},{"x":"4","y":"51","width":"4","height":"6","id":"20"},{"x":"8","y":"57","width":"4","height":"6","id":"21"},{"x":"0","y":"57","width":"6","height":"8","id":"22"},{"x":"6","y":"63","width":"6","height":"8","id":"23"},{"x":"0","y":"65","width":"6","height":"8","id":"24"},{"x":"6","y":"71","width":"6","height":"8","id":"25"},{"x":"0","y":"79","width":"12","height":"10","id":"26"}] 

gridstackId是對DOM中的元素的數據的自定義-ID標籤。

+4

比較呢? 'Number(parsed [j] .id)=== gridstackId'。僅供參考,'indexOf'總是返回一個數字,所以不需要將結果傳遞給'Number'。你在'parsed [j] .id.indexOf(gridstackId)'中做的是檢查**字符串**(例如)'「10」'是否包含字符'「1」'這當然是真的。 –

+0

不,它不返回部分匹配,'[10,11,14] .indexOf(1)'是最明確的虛假(-1)。你只是做錯了嗎?什麼'parsed [j] .id'和'gridstackId'實際包含 – adeneo

+0

@adeneo parsed是以下數據的JSON.parse:[{「x」:「0」,「y」:「0」,「width」 : 「12」, 「高度」: 「5」, 「ID」 爲 「1」},{ 「×」: 「0」, 「Y」: 「5」, 「寬度」: 「6」, 「高度」 : 「2」, 「ID」: 「2」},{ 「×」: 「6」, 「Y」: 「5」, 「寬度」: 「6」, 「高度」: 「2」, 「ID」 : 「3」},{ 「×」: 「0」, 「Y」: 「7」, 「寬度」: 「6」, 「高度」: 「2」, 「ID」: 「4」},{」 x「:」6「,」y「:」7「,」width「:」6「,」height「:」2「,」id「:」5「}等等,gridstackId是數據ID DOM上的元素。 – Mike

回答

2

parsed[j].id的值是一個字符串,所以parsed[j].id.indexOf(gridstackId)檢查gridstackId值是否在包含parsed[j].id(的gridstackId的值被轉換爲在這個過程中的字符串也一樣)。

如果你想檢查等於你應該使用比較運算符代替:===

由於gridstackId是一個數字,你必須parsed[j].id轉換爲數字還有:

Number(parsed[j].id) === gridstackId 

另外,不要轉換$(this).attr('data-custom-id')爲數字,把它作爲一個字符串:

var gridstackId = $(this).attr('data-custom-id'); 
// ... 
parsed[j].id === gridstackId; 

雖然要解決您的問題,即檢查是否存在具有此ID的對象,可以使用Array#some

var gridstackId = $(this).attr('data-custom-id'); 
var exists = parsed.some(function(obj) { 
    return obj.id === gridstackId; 
}); 

existstrue如果存在的量,條件(ID平等)被滿足的至少一個對象。