08.02.2015, 07:44
|
Интересующийся
|
|
Регистрация: 04.02.2015
Сообщений: 13
|
|
Подсчет значений
Добрый день!
имеется массив:
arNAMES = [
"Значение1",
"Значение3",
"Значение3",
"Значение1",
"Значение1",
"Значение6",
"Значение6"
];
нужно посчитать количество одинаковых значений и переписать в новый массив, например:
arNAMES["Значение1"] =3 шт;
arNAMES["Значение3"] =2 шт;
arNAMES["Значение6"] =2 шт;
подскажите, как можно это реализовать?
|
|
08.02.2015, 09:03
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
var arNames = [
"Значение1",
"Значение3",
"Значение3",
"Значение1",
"Значение1",
"Значение6",
"Значение6"
];
var result = arNames.reduce(function(map, item) {
map[item] = (map[item] || 0) + 1;
return map;
}, {});
alert(JSON.stringify(result));
__________________
В личку только с интересными предложениями
|
|
08.02.2015, 09:04
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Если значения только текстовые, то просто:
var arNAMES = [
"Значение1",
"Значение3",
"Значение3",
"Значение1",
"Значение1",
"Значение6",
"Значение6"
];
function calc(arr){
var out = {};
arr.forEach(function(val){
if(val in out) out[val]++;
else out[val] = 1;
});
return out
}
alert(JSON.stringify(
calc(arNAMES)
,0 , '\t'))
__________________
29375, 35
|
|
08.02.2015, 11:08
|
Интересующийся
|
|
Регистрация: 04.02.2015
Сообщений: 13
|
|
var arNames = [
"Значение1",
"Значение3",
"Значение3",
"Значение1",
"Значение1",
"Значение6",
"Значение6"
];
var result = arNames.reduce(function(map, item) {
map[item] = (map[item] || 0) + 1;
return map;
}, {});
alert(JSON.stringify(result));
подскажите, как теперь разложить массив result?
т.е. отдельно ключ и его значение
чтобы далее их можно было обработать, например так:
<span>ключ массива</span> - <span>значение ключа</span>
|
|
08.02.2015, 18:22
|
Интересующийся
|
|
Регистрация: 04.02.2015
Сообщений: 13
|
|
никто не подскажет?
|
|
08.02.2015, 18:59
|
Аспирант
|
|
Регистрация: 05.02.2015
Сообщений: 51
|
|
var arNames = [
"value1",
"value3",
"value3",
"value1",
"value1",
"value6",
"value6"
];
var result = arNames.reduce(function(map, item) {
map[item] = (map[item] || 0) + 1;
return map;
}, Object.create(null));
s=""
for (i in result) s+="<span>"+i+"</span>\t-\t"+"<span>"+result[i]+"</span>\n"
alert(s)
// <span>value1</span> - <span>3</span>
// <span>value3</span> - <span>2</span>
// <span>value6</span> - <span>2</span>
|
|
08.02.2015, 19:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Сообщение от freee
|
Object.create(null)
|
а почему не просто {}
|
|
08.02.2015, 20:02
|
Аспирант
|
|
Регистрация: 05.02.2015
Сообщений: 51
|
|
Сообщение от рони
|
а почему не просто {}
|
В случае, если у него расширен Object.prototype свойства попадут в строку. Так надежней.
|
|
09.02.2015, 01:17
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
рони, новая фича.) Раньше писали __proto__: null. Объект без прототипа - считай таблица.
__________________
29375, 35
|
|
09.02.2015, 01:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Aetae,
ок буду знать )))
|
|
|
|