少し前にJavaScriptで配列をシャッフルすることを考えましたが、同じようにして配列を操作するいくつかのサンプルを考えました。
uniqueは配列内の要素の重複を削除して、ユニークにします。
Array.prototype.unique = function() {
//配列内の要素をユニークにする。順序を保持する。
//配列に影響しない。
var array_length, new_array, check, i;
array_length = this.length;
new_array = [];
check = [];
for (i = 0; i < array_length; i++) {
if (!check[this[i]]) {
check[this[i]] = true;
new_array.push(this[i]);
}
}
return new_array;
}
//配列内の要素をユニークにする。順序を保持する。
//配列に影響しない。
var array_length, new_array, check, i;
array_length = this.length;
new_array = [];
check = [];
for (i = 0; i < array_length; i++) {
if (!check[this[i]]) {
check[this[i]] = true;
new_array.push(this[i]);
}
}
return new_array;
}
ExcelのSUM、AVERAGE、MEDIAN、MODEを再現してみました。
Array.prototype.sum = function() {
//要素を合計する。
//配列に影響しない。
var array_length, value, i;
array_length = this.length;
value = 0;
for (i = 0; i < array_length; i++) {
value += this[i];
}
return value;
}
//要素を合計する。
//配列に影響しない。
var array_length, value, i;
array_length = this.length;
value = 0;
for (i = 0; i < array_length; i++) {
value += this[i];
}
return value;
}
Array.prototype.average = function() {
//要素の平均を求める。
//配列に影響しない。
var array_length, value, i;
array_length = this.length;
value = 0;
for (i = 0; i < array_length; i++) {
value += this[i];
}
return value / array_length;
}
//要素の平均を求める。
//配列に影響しない。
var array_length, value, i;
array_length = this.length;
value = 0;
for (i = 0; i < array_length; i++) {
value += this[i];
}
return value / array_length;
}
Array.prototype.median = function() {
//要素の中央値(メジアン)を求める。
//配列に影響しない。
var array_length, value, mid;
array_length = this.length;
new_array = this.slice(0);
new_array.sort(function(a, b) {
return a - b;
});
mid = Math.floor(array_length / 2);
if (array_length % 2 == 1) {
return new_array[mid];
} else {
return (new_array[mid - 1] + new_array[mid]) / 2;
}
}
//要素の中央値(メジアン)を求める。
//配列に影響しない。
var array_length, value, mid;
array_length = this.length;
new_array = this.slice(0);
new_array.sort(function(a, b) {
return a - b;
});
mid = Math.floor(array_length / 2);
if (array_length % 2 == 1) {
return new_array[mid];
} else {
return (new_array[mid - 1] + new_array[mid]) / 2;
}
}
Array.prototype.mode = function() {
//要素の最頻値(モード)を求める。
//配列に影響しない。
var array_length, count, i, max, value;
array_length = this.length;
count = [];
for (i = 0; i < array_length; i++) {
if (count[this[i]]) {
count[this[i]] ++;
} else {
count[this[i]] = 1;
}
}
max = 0;
for (i = 0; i < count.length; i++) {
if (count[i] > max) {
max = count[i];
value = i;
}
}
if (value > 1) {
return value;
} else {
return "Error"; //重複がない場合はエラー。
}
}
//要素の最頻値(モード)を求める。
//配列に影響しない。
var array_length, count, i, max, value;
array_length = this.length;
count = [];
for (i = 0; i < array_length; i++) {
if (count[this[i]]) {
count[this[i]] ++;
} else {
count[this[i]] = 1;
}
}
max = 0;
for (i = 0; i < count.length; i++) {
if (count[i] > max) {
max = count[i];
value = i;
}
}
if (value > 1) {
return value;
} else {
return "Error"; //重複がない場合はエラー。
}
}
コメント