配列の値の数を数える

配列の値の数を数えるには、次の方法で可能です。

関数定義

/**
 * 配列の値の数を数える
 * @param {any[]} targetArray 数える配列
 * @return {any[]} 数えられた配列を返す
 * /
var countDuplicateValueInArray = function(targetArray) {
	var results = [], i = 0, len = 0;

	var unique = function(array) {
		var storage = {}, uniqueArray = [], value = '';

		for (var i = 0, len = array.length; i < len; i++) {
			value = array[i];
			if (!(value in storage)) {
				storage[value] = true;
				uniqueArray.push(value);
			}
		}

		return uniqueArray;
	};

	var inArray = function(searchValue, arrayData) {
		var key, result = -1;

		if (typeof searchValue !== 'string' && typeof searchValue !== 'number') return -1;
		if (!arrayData || typeof arrayData === 'object') return -1;

		for (key in arrayData) {
			if (arrayData[key] === searchValue) {
				result = key;
				break;
			}
		}

		return result;
	};

	if (!targetArray || targetArray.length === 0) return [];

	var searchValues = unique(targetArray), counts = [], countIndex = 0, searchIndex = -1;

	for (i = 0, len = targetArray.length; i < len; i++) {
		searchIndex = inArray(targetArray[i], searchValues);

		if (searchIndex !== -1) {
			if (!counts[searchIndex]) counts[searchIndex] = 0;
			counts[searchIndex]++;
		}
	}

	if (counts.length === 0) return [];

	for (i = 0, len = searchValues.length; i < len; i++) {
		results[i] = { value : searchValues[i], count : counts[i] };
	}

	return results;
};

使い方

引数

引数名 説明
第一引数
必須
targetArray Array 数える配列

戻り値

[{ value : 検索文字列, count : 検出数 } ...]の形式で返します。

サンプルコード

JavaScript

var arr = ['ddd', 'aaa', 'bbb', 'ccc', 'aaa', 'aaa', 'aaa', 'ccc', 'ccc', 'ccc', 'bbb'];

var counts = countDuplicateValueInArray(arr);

alert(counts);

JavaScript逆引きリファレンス一覧へ戻る