Javascript.RU

PHP-функция: array_diff

Javascript:

function array_diff (array) {	// Computes the difference of arrays
	// 
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)

	var arr_dif = [], i = 1, argc = arguments.length, argv = arguments, key, key_c, found=false;

	// loop through 1st array
	for ( key in array ){
		// loop over other arrays
		for (i = 1; i< argc; i++){
			// find in the compare array
			found = false;
			for (key_c in argv[i]) {
				if (argv[i][key_c] == array[key]) {
					found = true;
					break;
				}
			}

			if(!found){
				arr_dif[key] = array[key];
			}
		}
	}

	return arr_dif;
}

Примеры:

array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld']);
['Kevin']


Автор: Aykfx (не зарегистрирован), дата: 17 сентября, 2011 - 09:31
#permalink

// не понимаю почему данный код
// возврощаеет пустые элементы
// хотя если использую текст вместо цифр все нормально

nu = [1, 2, 3, 4, 5 , 6 ,7 ];
ou = [1, 2, 3, 4, 5 ];
arr = array_diff( nu , ou );
alert(arr.toString() ); // ,,,,,6,7


Автор: Aykfx (не зарегистрирован), дата: 17 сентября, 2011 - 09:40
#permalink

// имелось ввиду такой текст
array_diff(['Kevin', 'van', 'Zonneveld'], ['van', 'Zonneveld']);


Автор: vetalion, дата: 2 сентября, 2012 - 03:45
#permalink

В этой функции есть ошибка по сравнению с php вариантом если передавать в нее несколько массивов но функция работает не корректно.

(function() {
                Array.prototype.array_diff = function( arr ) {
                    var arr_dif = [], i = 1, that = this, argv = arguments, key, key_c, found = false;                    
                    Array.prototype.unshift.call(argv, that);
                    var argc = argv.length;
                    for (key in that) {
                        // Loop over other array
                        found = false;
                        founder:
                            for (i = 1; i < argc; i++) {                            
                                for (key_c in argv[i]) {
                                    if ( argv[i][key_c] == that[ key ] ) {
                                        found = true;
                                        break founder;
                                    }
                                }
                            }
                        if(!found) {
                            arr_dif[key] = that[key];
                        }   
                    } 
                    return arr_dif;                   
                }
            })();

Переписывал ее расширяя прототип.


Автор: Гость (не зарегистрирован), дата: 12 января, 2016 - 01:15
#permalink

написал такую функцию, работает быстрее, и если заменить
if (!has) {
arr[i] = cur;
}
на
if (!has) {
arr[arr.length] = cur;
}
то элементы будут вставлены без индекса

function arr_diff(arr1, arr2) {
var arr = [];
var newArr = [];
var argumentsLength = arguments.length;
var newArrLen = 0;

for (var o = 1; o < argumentsLength; o++) {
newArr = newArr.concat(arguments[o]);
}

newArrLen = newArr.length;

for (var i = 0; i < arr1.length; i++) {
var cur = arr1[i];
var has = false;

for (var j = 0; j < newArrLen; j++) {
if (cur == newArr[j]) {
has = true;
}
}
if (!has) {
arr[i] = cur;
}
}

return arr;
}


 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum