以下のような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 のようにそれぞれの配列内の重複を除いてやると
こうなる
[13.0, 19.0]
コード2.gsfunction 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()