Nick_3141592654
Я думаю, что это будет работать только в том случае, если array1 и array2 являются массивами строковых переменных, это не будет работать для произвольных типов массивов.
Кроме того, эти строки не могут быть произвольными. В частности, они не могут содержать пробелов (элемент массива "что-то" не будет работать, но "что-то" будет в порядке).
Я аннотировал код ниже, чтобы объяснить это. Кто бы это ни написал, ему должно быть немного стыдно за то, что он не предоставил некоторых пояснительных комментариев, не в последнюю очередь заголовка функции для объяснения требуемых типов аргументов. Попробовать-catch блок не пошло вкривь и вкось либо.
В любом случае вот так:
function unique (array1, array2) {
var obj1 = {}; // Declare a new object (see reference below).
// Loop over array1, working from end to beginning.
// Take each string element and use this as a key for
// a to-be-created new property within obj1, that property
// being assigned the same string value.
for (var i = array1.length-1; i >= 0; -- i)
obj1[array1[i]] = array1[i];
// Similarly loop over array2, copying each element (string
// value) into obj1 as a property.
//
// This is where the uniqueness is achieved because if
// array2[i] was also contained within array1[<any index>]
// then this particular string value will already exist
// within obj1 and the loop below will simply overwrite the
// same value on top of the existing property.
for (var i = array2.length-1; i >= 0; -- i)
obj1[array2[i]] = array2[i];
// Declare an array to store results.
var result = []
// Copy property values from obj1 into the results. These
// properties are the set of strings which are uniquely listed
// in array1, array2.
for (var k in obj1) {
result +=(obj1[k]);
}
return result;
}
Декларация obj1 следует следующим образом
Лучшая практика Javascript для объявления нового объекта.
Ключ к пониманию приведенного выше кода заключается в следующем:
Рассмотрим объект Javascript myObj, содержащий такие свойства, как" prop1"," prop2 " и т. д. Вы, вероятно, знакомы с доступом к этим объектам с помощью этой нотации:
var prop1Val = myObj.prop1;
var prop2Val = myObj.prop2;
Однако вы также можете получить доступ к этим свойствам, используя эту нотацию:
var prop1Val = myObj["prop1"];
var prop2val = myObj["prop2"];
Надеюсь, теперь вы понимаете, почему я сказал в самом начале, что array1, 2 должен содержать только простые строки, которые не содержат пробелов. Если бы они это сделали, вы бы попытались сделать что-то подобное:
var prop1Val = myObj["some thing"];
Что, как вы теперь знаете, соответствовало бы, в более знакомой нотации,:
var prop1Val = myObj.some thing; // WHICH IS AN INVALID SYNTAX!
Любой, кто сомневался в красоте Javascript, не может по-настоящему знать этот язык. Подобные конструкции - хотя они и могут сбивать с толку-обладают исключительной силой. Это язык, который значительно опередил свое время!