В прошлом я решил проблемы, подобные этой проблеме ниже, где я подсчитываю количество строк, появляющихся в строке, путем назначения ключа объекта его текущему значению или 0, а затем добавляя 1 каждый раз, когда письмо появляется снова. См. Строку, на которую я ссылаюсь ниже.Размещение скобок при установке значения ключа объекта JavaScript
var letterCount = function(str) {
noPuncStr = str.replace(/[^a-z]/ig, "")
// noPuncStr = str.replace(/[^\w]/ig, "") //same thing except underscores would be allowed
// console.log(noPuncStr);
var result = {};
for (var i = 0; i < noPuncStr.length; i++) {
result[noPuncStr[i]] = (result[noPuncStr[i]] || 0) + 1 //THIS LINE. I set the key to its current value if truthy or 0 then add 1
}
return result;
}
console.log(letterCount("a%b& c*da"));
Я только что закончил подобного рода проблемы, когда я пытался сделать то же самое, за исключением того, что я хотел, чтобы установить ключ к себе или пустой массив, если ложно, а затем нажать на текущее значение результата ключ. Однако, когда я это сделал, я получил TypeError: (result [value] || []). Push не является функцией. Основываясь на других ответах на проблему, я понял, что мог бы решить ее, поставив круглые скобки в левом конце строки вместо того, чтобы поместить ее после =, как я сделал в проблеме letterCount выше. Почему это так? Чтобы лучше проиллюстрировать, что я говорю о правильном решении, и строка, о которой я говорю, приведен ниже.
Array.prototype.groupBy = function(fn) {
var result = {};
if (arguments.length === 0) {
this.forEach(function(value){
(result[value] = result[value] || []).push(value); /*WHY is the (
all the way on the left of the line instead of after the equals sign
like in letterCount?*/
})
return result;
} else {
this.forEach(function(value){
(result[fn(value)] = result[fn(value)] || []).push(value);
})
return result;
}
}
Буду признателен за любую помощь!
Я до сих пор путают, почему вы правы. крики будут редактировать снова и уточнить сейчас. здесь: result [значение] = (результат [значение] || []). push ('Hmm'); становится [] и [] .push ("hmm") становится 1. в следующем примере (результат [значение] = результат [значение] || []), result [значение] установлен на [], но когда успех вдаваясь в это, он стал успехом? почему [] .push ('hmm') возвращает 1, когда [] .push («success») дает вам [«success»] – MattGoldwater
не беспокойтесь о том, чтобы ответить. выдумал. – MattGoldwater
Извините, пришлось забрать мою жену. Если у вас все еще есть вопросы, дайте мне знать. –