var ary1 = [4,2,3,3,2,2,7,8,88,88];
// 重複を削除したリスト
var ary2 = ary1.filter(function (v, i, ary) {
return ary.indexOf(v) === i;
});
// 重複値(同値あり)のリストを取得
var ary3 = ary1.filter(function (v, i, ary) {
return ary.indexOf(v) !== ary.lastIndexOf(v);
});
// 重複値のリスト
var ary4 = ary1.filter(function (v, i, ary) {
return ary.indexOf(v) === i && i !== ary.lastIndexOf(v);
});
重複を削除したリスト 4,2,3,7,8,88 重複値(同値あり)のリストを取得 2,3,3,2,2,88,88 重複値のリスト 2,3,88 重複値(同値あり)と 重複要素番号 2,3,3,2,2,88,88 1,2,3,4,5,8,9
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="google" content="notranslate" />
<title>重複チェックをfilterで行う</title>
<link rel="stylesheet" type="text/css" href="common1.css" />
<script src="jquery-1.11.1.min.js"></script>
<script>
$(document).ready(function(){
var ary1 = [4,2,3,3,2,2,7,8,88,88];
// 重複を削除したリスト
var ary2 = ary1.filter(function (v, i, ary) {
return ary.indexOf(v) === i;
});
// 重複値(同値あり)のリストを取得
var ary3 = ary1.filter(function (v, i, ary) {
return ary.indexOf(v) !== ary.lastIndexOf(v);
});
// 重複値のリスト
var ary4 = ary1.filter(function (v, i, ary) {
return ary.indexOf(v) === i && i !== ary.lastIndexOf(v);
});
// 重複要素番号のリスト
var indexs5=[];
var ary5 = ary1.filter(function (v, i, ary) {
if(ary.indexOf(v) !== ary.lastIndexOf(v)){
indexs5.push(i);
return true;
}else{
return false;
}
});
$("#ary1").html(ary1.join(","));
$("#ary2").html(ary2.join(","));
$("#ary3").html(ary3.join(","));
$("#ary4").html(ary4.join(","));
$("#ary5").html(ary5.join(","));
$("#indexs5").html(indexs5.join(","));
});
</script>
<style type="text/css">
</style>
</head>
<body>
<div id="page1">
<h1 id="header">重複チェックをfilterで行う</h1>
<div class="container" >
<div class="sec1">
<div>フィルター前</div>
<div id="secry1"></div>
<hr>
<div>重複を削除したリスト</div>
<div id="secry2"></div><br>
<div>重複値(同値あり)のリストを取得</div>
<div id="secry3"></div><br>
<div>重複値のリスト</div>
<div id="secry4"></div><br>
<div>重複値(同値あり)と
重複要素番号</div>
<div id="secry5"></div>
<div id="indexs5"></div>
</div><!-- sec1 -->
</div><!-- content -->
<div id="footer">(C) kenji uehara 2014/08/05</div>
</div><!-- page1 -->
</body>
</html>
サンプル
参照元サイト
var data=[[1,'neko',99],[2,'nezumi',99],[3,'usi',20],[3,'usi',99],[4,'tora',20]]; //★配列またはObjectをJSON文字列化する。 var json_str = JSON.stringify(data); //出力例:json_str→[[1,"neko",99],[2,"nezumi",99],[3,"usi",20],[3,"usi",99],[4,"tora",20]] //★JSON文字列をパースする。 var data2 = JSON.parse(json_str);//※オブジェクトに戻す場合
JSON文字列をHTMLに埋め込む場合の注意点
JSON文字列はdiv要素などではなく、input要素に埋め込んだ方がよい。<input id="json1" type="hidden" value=[JSON文字列] style="display:none" />
var data=[[1,'neko',99],[2,'nezumi',99],[3,'usi',20],[3,'usi',99],[4,'tora',20],];
//★行列変換
var data2=transpose(data);
//★2次元配列の行列入替
function transpose(a) {
return Object.keys(a[0]).map(function (c) {
return a.map(function (r) {
return r[c];
});
});
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="google" content="notranslate" />
<title>2次元配列の行列を入替</title>
<link rel="stylesheet" type="text/css" href="common1.css" />
<script src="jquery-1.11.1.min.js"></script>
<script>
$(document).ready(function(){
var data=[[1,'neko',99],[2,'nezumi',99],[3,'usi',20],[3,'usi',99],[4,'tora',20],];
//★行列変換
var data2=transpose(data);
//出力用
var json_text1 = JSON.stringify(data);
var json_text2 = JSON.stringify(data2);
$("#ary1").html(json_text1);
$("#ary2").html(json_text2);
});
//★2次元配列の行列入替(nullはエラーになるので注意)
function transpose(a) {
return Object.keys(a[0]).map(function (c) {
return a.map(function (r) {
return r[c];
});
});
}
</script>
<style type="text/css">
</style>
</head>
<body>
<div id="page1">
<h1 id="header">2次元配列の行列を入替</h1>
<div class="container" >
<div class="sec1">
<div>変換前</div>
<div id="secry1"></div>
<hr>
<div>行列入替後</div>
<div id="secry2"></div><br>
</div><!-- sec1 -->
</div><!-- content -->
<div id="footer">(C) kenji uehara 2014/08/05</div>
</div><!-- page1 -->
</body>
</html>
サンプル
$(document).ready(function(){
var data=[[1,'neko',99],[2,'usi',99],[3,'usi',20],[3,'usi',99],[4,'tora',20],];
var clm_no=2;//重複チェックする列番号
//★2次元配列の重複チェック
var rtns=overlapChkForMatrix(data,clm_no);
//出力値は重複行番号と重複値 → {"0":99,"2":20}
console.dir(rtns);//デバッグ出力
});
/**
*重複チェック(2次元配列用)
* @param data 2次元配列
* @param clmNo チェックする列番号
* @param type 返値タイプ 0:重複情報オブジェクト 1:重複値配列
* @return 重複情報オブジェクトか重複値配列
*
*/
function overlapChkForMatrix(data,clmNo,type){
if(data =='' || data==null || !(data instanceof Array)){
return null;
}
if(data.length==0){
return null;
}
var data2=transpose(data);//行列変換
var ary1=data2[clmNo];//チェック対象列の配列を取得
var rtns={};//重複情報
//重複フィルター処理
var overlap_vals = ary1.filter(function (v, i, ary) {
if(ary.indexOf(v) === i && i !== ary.lastIndexOf(v)){
//重複情報をセット
rtns[i]=v;
return true;
}else{
return false;
}
});
if(type==1){
return overlap_vals;
}else{
return rtns;
}
}
//2次元配列の行列入替(nullはエラーになるので注意)
function transpose(a) {
return Object.keys(a[0]).map(function (c) {
return a.map(function (r) {
return r[c];
});
});
}
<script>
function check(){
alert('test');
return false;
}
</script>
<form action="/dummy" onsubmit="return check();" >
~略~
<input type="submit" value="送信"/>
</form>
<form action="/dummy" onsubmit="check();" >
~略~
<input type="submit" value="送信"/>
</form>
<form action="/dummy" " >
~略~
<input type="submit" value="送信" onsubmit="return check();/>
</form>
/**
* 連想配列から最初のキーを取得
* @param obj 連想配列(オブジェクト)
*/
function getFirstKey(obj){
for(key in obj ){
return key;
}
}
var data={
0:{aof:'success',send_dt:'2012/12/12'},
1:{aof:'success',send_dt:'2012/12/13'},
2:{aof:'fail',send_dt:'2012/12/14'},
3:{aof:'success',send_dt:'2012/12/15'},
};
//要素数
var len=Object.keys(data).length;
//※ len=4
<script src="../../style2/js/jquery-1.11.1.min.js" async></script> <script src="../../style2/js/bootstrap.min.js" async></script> <script src="elephant.js" async></script> <script src="neko.js" async></script>
console.log('elephant.js');
var a=0;
a=a+1;
a=a+1;
a=a+1;
~ 略 ~
a=a+1;
a=a+1;
console.log('Elephant='+a);//←16388行目
console.log('neko.js');
| JSファイル名 | サイズ(Byte) |
|---|---|
| jquery-1.11.1.min.js | 95788 |
| bootstrap.min.js | 31819 |
| elephant.js | 130000 |
| neko.js | 100 |


