Изучаю создание подсчета количества слов в тексте и не совсем понимаю принцип работы следующего кода. Пожалуйста, объясните. Не понимаю для чего используется здесь двойной массив:
if (arr[arr[i]]) {
arr[arr[i]] += 1;
arr.splice(i, 1);
} else {
arr[arr[i]] = 1;
Не понимаю, принцип работы метода sort именно здесь:
arr.sort(function(a, b) {
return arr[b] - arr[a];
});
И не понимаю совсем для чего используется вот этот вот кусок, понимаю только, что мы создаём JSON, но для чего он нужен и что за переменные в нём используются - не понимаю:
var stringResult = JSON.stringify(arr, function(k, v) {
if (k == '') return v;
return `${v} - ${arr[v]}`;
}, 2);
var arr = ('Привет, как твои дела? Привет, нормально, а как твои?').toLowerCase().replace(/[.,\/#!?$%\^&\*;:{}=\-_`~()]/g, "").split(' ');
for (var len = arr.length, i = len; --i >= 0;) {
if (arr[arr[i]]) {
arr[arr[i]] += 1;
arr.splice(i, 1);
} else {
arr[arr[i]] = 1;
}
}
arr.sort(function(a, b) {
return arr[b] - arr[a];
});
console.log(arr);
var stringResult = JSON.stringify(arr, function(k, v) {
if (k == '') return v;
return `${v} - ${arr[v]}`;
}, 2);
console.log(stringResult);
В данном случае используется возможность, позволяющая хранить в массиве не числовые ключи.
Благодаря ей можно подсчитывать количество повторений слов без дополнительных переменных.
arr[i]
- возвращает конкретное слово
arr[arr[i]]
- позволяет обратиться к свойству массива с именем соответствующим значению arr[i]
.
Так если arr[i] == "Привет"
, то arr[arr[i]]
-> arr["Привет"]
.
Внутри цикла:
for (var len = arr.length, i = len; --i >= 0;) {
if (arr[arr[i]]) { // если слово уже встречалось
arr[arr[i]] += 1; // увеличиваем счетчик
arr.splice(i, 1); // удаляем элемент массива
} else { // иначе
arr[arr[i]] = 1; // устанавливаем счетчик
}
}
происходит подсчет слов, и удаление повторных вхождений слов.
Далее происходит сортировка массива на основе количества повторений слов
arr.sort(function(a, b) {
// a,b здесь это слова `"Привет"` и т.д. соответственно `arr[a]` - вернет количество повторений слова.
return arr[b] - arr[a];
});
Код с JSON.stringify нужен только для красивого вывода. За красивый вывод отвечает функция передаваемая в качестве параметра. Если ее не указывать выведется просто массив слов, в данном же случае дополнительно выводится количество повторений каждого слова.
var arr = ('Привет старушка, как дела? Дела у меня, хорошо меня. Привет старушка, как дела? Дела у меня, хорошо меня. Привет старушка, как дела? Дела у меня, хорошо меня.').toLowerCase().replace(/[.,\/#!?$%\^&\*;:{}=\-_`~()]/g, "").split(' ');
for (var len = arr.length, i = len; --i >= 0;) {
if (arr[arr[i]]) {
arr[arr[i]] += 1;
arr.splice(i, 1);
} else {
arr[arr[i]] = 1;
}
}
arr.sort(function(a, b) {
return arr[b] - arr[a];
});
console.log(arr);
var stringResult = JSON.stringify(arr, function(k, v) {
if (k == '') return v;
return `${v} - ${arr[v]}`;
}, 2);
console.log(stringResult);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу получить частичное представление из метода контроллера, в чем может причина
Всем привет есть таблицаКаждому блоку таблицы задан определенный процентный width который в сумме дает 100% для корректного отображения всего...
нужно сделать приложение для конкатенации изображений,которые берутся из 2 инпутов(в разметке должны быть только 2 инпута и канвас) и отображаются...