array challenge

Hi all,

I have two arrays:
var a = new Array(100,200,300,400,500,600,700,800)
and
var b = new Array(100,150,450,500,650,750,800)

I need two methods:

  1. a method that puts var b into var a, but every value myst be unique!
    so result: var a becomes: (100,150,200,300,400,450,500,600,650,700,750,800)

  2. a method that pulls the values of var b out of var a
    so result: var becomes: (200,300,400,600,700)

Can anyone help?
(I don’t see the light :idea: )

For your problem 1 we use this method to return unique values of an array (sorry: it’s in German). So you can simply concat thos two arrays and then use that method to get unique values. The parameter “leereEntfernen” is used to either leave or remove empty values:

var inputArray = arguments[0];
var leereEntfernen = arguments[1];
var outputArray = new Array();
var vorhanden = 0;
var counter = 0;

for ( var i = 0 ; i < inputArray.length ; i++ )
{
	vorhanden = 0;
	if (i == 0)
	{
		if (leereEntfernen && (inputArray[i] == '' || inputArray[i] == null))
		{
			continue;
		}
		else
		{
			outputArray[counter] = inputArray[i];
			counter++;
			continue;
		}
	}
	else
	{
		for ( var k = 0 ; k < outputArray.length ; k++ )
		{
			if (outputArray[k] == inputArray[i])
			{
				// Wert ist bereits in OutputArray
				vorhanden = 1;
				continue;
			}
		}
		if (vorhanden == 0)
		{
			if (leereEntfernen && (inputArray[i] == '' || inputArray[i] == null))
			{
				continue;
			}
			else
			{
				outputArray[counter] = inputArray[i];
				counter++;
				continue;
			}
		}
	}
}

return outputArray;

Problem 2 could be solved like this:

var ArrayResult = arguments[0],  // your Array a
	ArrayRemove = arguments[1], // your Array b
	spalteResult = arguments[2], // optional column
	spalteRemove = arguments[3], // optional colum
	testEntryResult,
	testEntryRemove;

if (!ArrayResult || !ArrayRemove)
{
	return;
}

if (spalteResult && spalteRemove)
{
	for ( var i = ArrayResult.length - 1 ; i >= 0 ; i-- )
	{
		testEntryResult = ArrayResult[i][spalteResult-1];
		for ( var j = 0 ; j < ArrayRemove.length ; j++ )
		{
			testEntryRemove = ArrayRemove[j][spalteRemove-1]
			if (testEntryRemove == testEntryResult)
			{
				ArrayResult.splice(i, 1);
				break;
			}
		}
	}
}

else if (spalteResult && !spalteRemove)
{
	for ( var i = ArrayResult.length - 1 ; i >= 0 ; i-- )
	{
		testEntryResult = ArrayResult[i][spalteResult-1];
		for ( var j = 0 ; j < ArrayRemove.length ; j++ )
		{
			testEntryRemove = ArrayRemove[j]
			if (testEntryRemove == testEntryResult)
			{
				ArrayResult.splice(i, 1);
				break;
			}
		}
	}
}

else if (!spalteResult && spalteRemove)
{
	for ( var i = ArrayResult.length - 1 ; i >= 0 ; i-- )
	{
		testEntryResult = ArrayResult[i];
		for ( var j = 0 ; j < ArrayRemove.length ; j++ )
		{
			testEntryRemove = ArrayRemove[j][spalteRemove-1]
			if (testEntryRemove == testEntryResult)
			{
				ArrayResult.splice(i, 1);
				break;
			}
		}
	}
}

else
{
	for ( var i = ArrayResult.length - 1 ; i >= 0 ; i-- )
	{
		testEntryResult = ArrayResult[i];
		for ( var j = 0 ; j < ArrayRemove.length ; j++ )
		{
			testEntryRemove = ArrayRemove[j]
			if (testEntryRemove == testEntryResult)
			{
				ArrayResult.splice(i, 1);
				break;
			}
		}
	}
}

if (ArrayResult.length == 0)
{
	return null;
}
else
{
	return ArrayResult;
}

Hope this helps
Patrick

Hi Patrick, the first method is not working:

I do this:

var a = new Array(100,200,300,400)
var b = new Array(100,150,200,250,400)

and than

var c = yourmethod(a,b)
but it returns the same values as var a! not combined!

That’s why I wrote

So you can simply concat thos two arrays and then use that method to get unique values

This method only gives you unique values of an array. So you first have to “join” the two arrays (using concat) and then use that method to filter duplicate values.

aaaaaaaaahhhhhhhhhhhhhhh, THANKS :lol: