Одиночная линия на основе функции уменьшения массива
const uniqueCount = ["a", "b", "c", "d", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
const distribution = uniqueCount.reduce((acum,cur) => Object.assign(acum,{[cur]: (acum[cur] | 0)+1}),{});
console.log(JSON.stringify(distribution,null,2));
Оператор ==
проверяет, являются ли два выражения одним и тем же указателем на один и тот же объект. Какао называет это отношение «идентичным» (см., Например, NSArray indexOfObjectIdenticalTo:
).
Чтобы проверить, равны ли два объекта, вы должны отправить одному из них isEqual:
сообщение (или более конкретное сообщение, такое как isEqualToString:
, если оно отвечает на одно), передавая другой объект. Это вернет YES
, если у вас действительно есть только один объект (равный себе, очевидно) или если у вас есть два одинаковых объекта. В последнем случае ==
будет оценивать как НЕТ
.
[objectA isEqual:objectB]
обычно хороший выбор. Обратите внимание, что некоторые классы могут иметь более специализированные функции равенства. (isEqualToString:
et.al.) Они обычно проверяют не то, являются ли они одним и тем же объектом, а являются ли они равными, что является отличной концепцией. (Два строковых объекта могут быть равны, даже если они не имеют один и тот же адрес памяти.)
Знак == сообщает вам, указывают ли два указателя на один и тот же объект. isEqual
сообщает вам, является ли содержимое двух объектов одинаковым (но не обязательно фактически одним и тем же объектом). Немного сбивает с толку.
Попробуйте этот код, чтобы лучше понять:
NSString *aString = [NSString stringWithFormat:@"Hello"];
NSString *bString = aString;
NSString *cString = [NSString stringWithFormat:@"Hello"];
if (aString == bString)
NSLog(@"CHECK 1");
if (bString == cString)
NSLog(@"CHECK 2");
if ([aString isEqual:bString])
NSLog(@"CHECK 3");
if ([bString isEqual:cString])
NSLog(@"CHECK 4");
// Look at the pointers:
NSLog(@"%p", aString);
NSLog(@"%p", bString);
NSLog(@"%p", cString);
Два других ответа правильно отвечают на вопрос в вашем заголовке. Однако правильный ответ на совершенно другой вопрос в вашем основном тексте: да, оператор == подходит для проверки того, относятся ли две переменные к одному и тому же объекту .
]