차이를 반환하는 2 개의 배열 비교
두 배열을 비교하고 차이를 반환하는 가장 빠른 / 좋은 방법은 무엇입니까? array_diff
PHP 와 매우 유사 합니다. 쉬운 기능이 each()
있습니까? 아니면 foreach
루프?
작업 수행 http://jsfiddle.net/u9xES/
좋은 링크 (Jquery 문서) : http://docs.jquery.com/Main_Page {여기에서 API를 검색하거나 읽을 수 있습니다.}
JQuery에서 수행하려는 경우 도움이되기를 바랍니다.
마지막에 경고는 일반적이지 않은 요소 배열의 배열, 즉 두 배열 상관 차이를 프롬프트합니다.
내가 놓친 것이 있으면 알려주세요, 건배!
암호
var array1 = [1, 2, 3, 4, 5, 6];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var difference = [];
jQuery.grep(array2, function(el) {
if (jQuery.inArray(el, array1) == -1) difference.push(el);
});
alert(" the difference is " + difference); // Changed variable name
나는 오래된 질문이라는 것을 알고 싶다고 작은 트릭을 공유 할 생각했습니다.
var diff = $(old_array).not(new_array).get();
diff
이제는 없었던 old_array
것을 포함 합니다 .new_array
밑줄을 다음과 같이 사용하십시오.
_.difference(array1,array2)
var arrayDiff = function (firstArr, secondArr) {
var i, o = [], fLen = firstArr.length, sLen = secondArr.length, len;
if (fLen > sLen) {
len = sLen;
} else if (fLen < sLen) {
len = fLen;
} else {
len = sLen;
}
for (i=0; i < len; i++) {
if (firstArr[i] !== secondArr[i]) {
o.push({idx: i, elem1: firstArr[i], elem2: secondArr[i]}); //idx: array index
}
}
if (fLen > sLen) { // first > second
for (i=sLen; i< fLen; i++) {
o.push({idx: i, 0: firstArr[i], 1: undefined});
}
} else if (fLen < sLen) {
for (i=fLen; i< sLen; i++) {
o.push({idx: i, 0: undefined, 1: secondArr[i]});
}
}
return o;
};
/** SUBTRACT ARRAYS **/
function subtractarrays(array1, array2){
var difference = [];
for( var i = 0; i < array1.length; i++ ) {
if( $.inArray( array1[i], array2 ) == -1 ) {
difference.push(array1[i]);
}
}
return difference;
}
그런 다음 코드의 어느 곳에서나 함수를 호출 할 수 있습니다.
var I_like = ["love", "sex", "food"];
var she_likes = ["love", "food"];
alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty"!
이 모든 경우 작동하며 위 방법의 문제를 피합니다. 도움이 되셨기를 바랍니다.
이런 식으로 첫 번째 배열이 두 번째 배열보다 작은 지 걱정할 필요가 없습니다.
var arr1 = [1, 2, 3, 4, 5, 6,10],
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function array_diff(array1, array2){
var difference = $.grep(array1, function(el) { return $.inArray(el,array2) < 0});
return difference.concat($.grep(array2, function(el) { return $.inArray(el,array1) < 0}));;
}
console.log(array_diff(arr1, arr2));
답변의 순서를 비교하고 다음과 같이 답변을 확장 할 수 있습니다.
Array.prototype.compareTo = function (array2){
var array1 = this;
var difference = [];
$.grep(array2, function(el) {
if ($.inArray(el, array1) == -1) difference.push(el);
});
if( difference.length === 0 ){
var $i = 0;
while($i < array1.length){
if(array1[$i] !== array2[$i]){
return false;
}
$i++;
}
return true;
}
return false;
}
이와 같은 배열 작업은 jQuery의 가장 큰 장점이 아닙니다. Underscorejs와 같은 라이브러리, 특히 차이 함수를 순서합니다.
정렬되지 않은 배열, 이중 값 및 다른 순서 및 길이와 함께 작동해야하며 필터링 된 값은 array1, array2 또는 둘 다로 제공됩니다.
function arrayDiff(arr1, arr2) {
var diff = {};
diff.arr1 = arr1.filter(function(value) {
if (arr2.indexOf(value) === -1) {
return value;
}
});
diff.arr2 = arr2.filter(function(value) {
if (arr1.indexOf(value) === -1) {
return value;
}
});
diff.concat = diff.arr1.concat(diff.arr2);
return diff;
};
var firstArray = [1,2,3,4];
var secondArray = [4,6,1,4];
console.log( arrayDiff(firstArray, secondArray) );
console.log( arrayDiff(firstArray, secondArray).arr1 );
// => [ 2, 3 ]
console.log( arrayDiff(firstArray, secondArray).concat );
// => [ 2, 3, 6 ]
짧은 버전은 다음과 같을 수 있습니다.
const diff = (a, b) => b.filter((i) => a.indexOf(i) === -1);
결과 :
diff(['a', 'b'], ['a', 'b', 'c', 'd']);
["c", "d"]
참고 URL : https://stackoverflow.com/questions/10927722/compare-2-arrays-which-returns-difference
'ProgramingTip' 카테고리의 다른 글
Windows 7에서 명령 프롬프트의 기본 시작 디렉터리 변경 (0) | 2020.12.02 |
---|---|
UISegmentedControl을 컨테이너보기에 프로그래밍 방식으로 추가하는 방법 (0) | 2020.12.02 |
iOS에서 긴 작업을 할 때 "오버레이"로드 (0) | 2020.12.02 |
Linux에서 사용중인 메모리 프로세스의 양을 확인하는 방법은 무엇입니까? (0) | 2020.12.02 |
Windows 8/10에서 NetBeans IDE 확장 (0) | 2020.12.02 |