2016-07-29 5 views
1

2 차원 배열이 있고 중복을 제거하려고합니다. jQuery 함수 inArray를 사용하여이 작업을 수행하려고합니다.inArray bidimensional doesnt work

이 내 배열 :

var myArray = [ { data1 : "01" , data2 : "02" }, 
       { data1 : "01" , data2 : "03" }, 
       { data1 : "01" , data2 : "02" } ]; 
var newData = { data1 : "01" , data2 : "02" }; 

console.log($.inArray(newData, myArray)); 
    -1 

어떻게이 비교할 수 있습니까?

+0

원하는 출력은 무엇입니까? –

답변

1

inArray 도움이되기를 바랍니다 : 배열의 지정한 값

검색 및 반환 색인 (-1하지 않을 경우 있음). 당신이 개체에 대한 grep/검색 할 때문에

는 가장 좋은 방법은 항상 :

JSON.stringify(elementOfArray) == JSON.stringify(newData) 

그래서, jQuery를에 필터링하거나 동일한 콘텐츠를 가진 모든 요소를 ​​grep 수 있습니다

var myArray = [{data1: "01", data2: "02"}, 
 
       {data1: "01", data2: "03"}, 
 
       {data1: "01", data2: "02"}]; 
 
var newData = {data1: "01", data2: "02"}; 
 

 
var result = $.grep(myArray, function (elementOfArray, indexInArray) { 
 
    return JSON.stringify(elementOfArray) == JSON.stringify(newData); 
 
}); 
 

 
console.log(result.length); 
 

 

 
newData = {data1: "01", data2: "03"}; 
 
result = $.grep(myArray, function (elementOfArray, indexInArray) { 
 
    return JSON.stringify(elementOfArray) == JSON.stringify(newData); 
 
}); 
 

 
console.log(result.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

개체가 다르기 때문에 그것은 ... 작동하지 않을 수 있습니다 예를 들어이 같이 그 일을 작동합니다 :

var myArray = [ { data1 : "01" , data2 : "02" }, 
 
       { data1 : "01" , data2 : "03" }, 
 
       { data1 : "01" , data2 : "02" } ]; 
 
var newData = myArray[0]; 
 

 
console.log($.inArray(newData, myArray));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

당신이 개체의 특성을 비교한다 할 수있는 유일한 (또는 각 객체에 ID를 추가하고 ID를 비교하는 등) ...

비교할 데이터를 직렬화하고 Array 프로토 타입의 findIndex 메소드를 사용할 수도 있습니다.

var myArray = [ 
 
    {data1: "01", data2: "02"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "02"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
    {data1: "01", data2: "03"}, 
 
]; 
 
var data = {data1: "01", data2: "02"}; 
 

 
// Using jQuery's grep method 
 
console.time("time1") 
 
var result = $.grep(myArray, function (element) { 
 
    return JSON.stringify(element) == JSON.stringify(data); 
 
}); 
 
console.timeEnd("time1"); 
 
console.log(result.length); 
 

 
// Using Array's prototype findIndex method 
 
console.time("time2") 
 
result = myArray.findIndex(function(element){ 
 
\t return JSON.stringify(element) == JSON.stringify(data); 
 
}) 
 
console.timeEnd("time2"); 
 
console.log(result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

그것은 사용하는 것이 좋습니다

내장 findIndex 방법이를 선두를 발견하고 더 효율적 그래서 다른 항목을 통해 반복을 중지하기 때문에 브라우저가 지원하는 경우. 이