以下のような3つの配列があって
var A = [1, 2, 3, 11, 12];
var B = [2, 16, 1, 3, 5, 4];
var C = [3, 2, 16, 1, 12, 4, 7, 8, 9, 10];
共通する [1, 2, 3] を取得したい
コード.gs
function myFunction() {
var A = [1, 2, 3, 11, 12];
var B = [2, 16, 1, 3, 5, 4];
var C = [3, 2, 16, 1, 12, 4, 7, 8, 9, 10];
var arrays = [A, B, C];
var duparray = getDuparray(arrays);
Logger.log(duparray);
}
function getDuparray(arrays) {
var duparray = arrays[0];
for(var i = 0; i < arrays.length-1; i++) {
Array.prototype.push.apply(duparray, arrays[i + 1]);
duparray = duparray.filter(compareArrays);
}
return duparray;
}
function compareArrays(value_i, index, array){
var value_i_index = array.indexOf(value_i);
var result = value_i_index !== index;
return result;
}
|
実行結果
補足
配列内に重複する要素がある場合
ユニークにしてからやらないと正確な結果を得られない
例えば以下のような配列を上のコード.gsで実行すると
var A = [3,13,19,29,59,61,69];
var B = [13,15,19,53,71];
var C = [4,6,6,7,7,8,8,13,13,19,53,53,57,57,60,60];
こうなる
[6.0, 7.0, 8.0, 13.0, 13.0, 19.0, 53.0, 57.0, 60.0]
その対策として以下の コード2.gs のようにそれぞれの配列内の重複を除いてやると
こうなる
コード2.gs
function myFunction() {
var A = [3,13,19,29,59,61,69];
var B = [13,15,19,53,71];
var C = [4,6,6,7,7,8,8,13,13,19,53,53,57,57,60,60];
var arrays = [A, B, C];
arrays = getUniqueArrays(arrays);
var duparray = getDuparray(arrays);
Logger.log(duparray);
}
function getUniqueArrays(arrays) {// 配列内の重複をなくしてユニークにしてノイズを減らしておく(これやらないと正しくfilterされない)
var uniqueValues = [];
for(var i = 0; i < arrays.length; i++) {
var array = getUniqueValues(arrays[i]);
uniqueValues.push(array);
}
return uniqueValues;
}
function getDuparray(arrays) {
var duparray = arrays[0];
for(var i = 0; i < arrays.length-1; i++) {
Array.prototype.push.apply(duparray, arrays[i + 1]);
duparray = duparray.filter(compareArrays);
}
return duparray;
}
function compareArrays(value_i, index, array){
var value_i_index = array.indexOf(value_i);
var result = value_i_index !== index;
return result;
}
function getUniqueValues(array){
var uniqueRows = array.filter(compareUniqueValues);
return uniqueRows;
}
function compareUniqueValues(value_i, index, array){
var value_i_index = array.indexOf(value_i);
var result = value_i_index === index;
return result;
}
|
参考
Array.prototype.filter()