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

© Илья Кантор, 2007-2021 О проекте - Обратная связь - Вверх

AltStyle によって変換されたページ (->オリジナル) /