質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1995閲覧

最初のn文字が一致する行を削除するプログラム

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/04/12 16:10

編集2017/04/13 03:14

タイトル通り 最初のn文字が一致する行を削除するプログラムをjavascriptと必要であればjQueryを用いて作成したいと思っています。

http://txt.3m3g.com/
ココに似たようなものがあるのですが、これは行の完全一致の場合、重複行を削除します。
しかし今回はそれでは問題があるので、最初のn文字が重複する時に、その重複行を削除したいのです。
取り掛かろうと思ったのですが、早速躓いてしまったので、
ヒントか回答例を提示していただけないでしょうか。

よろしくお願いします。

goufさんの回答を参考に作ってみました。

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <script src="http://code.jquery.com/jquery-latest.js"></script> 8 <title>pasword generator</title> 9</head> 10<style> 11 textarea { 12 outline: none; 13 border: 1px solid #aaa; 14 -webkit-transition: all .3s; 15 transition: all .3s; 16 } 17 textarea:focus { 18 box-shadow: 0 0 7px #1abc9c; 19 border: 1px solid #1abc9c; 20 } 21 .button { 22 width: 100px; 23 font-size: 20px; 24 background-color: #333; 25 border: 2px solid #333; 26 color: #fff; 27 line-height: 50px; 28 transition: all .3s; 29 } 30 .button:hover { 31 background-color: #fff; 32 border-color: #1abc9c; 33 color: #1abc9c; 34 } 35 .box,.box2 { 36 display: none; 37 } 38</style> 39<body> 40 <div><textarea id="input" cols="100" rows="40"></textarea></div> 41 <div><input class="button" type="button" value="変 換"></div> 42 <textarea id="output" cols="100" rows="40"></textarea> 43 <textarea id="output2" cols="100" rows="40"></textarea> 44 <div class="box"></div> 45 <div class="box2"></div> 46 47 <script> 48 (function(){ 49 'use strict'; 50 function firstThreeChars(elm) { 51 // 配列をmap で回して index 指定値として利用 52 // 文字列から最初の13字を抜き出す 53 return Array.apply(null, Array(13)).map(function(_, i) { 54 return elm[i]; 55 }).join(''); 56 } 57 58 function rejectDup(elements) { 59 // もともとの文字列に加えて 重複しているか否かを判定できるよう設定値を追加 60 var obj = elements.map(function(elm) { 61 return { 62 str: elm, 63 firstThreeChars: firstThreeChars(elm), 64 duplicated: false 65 } 66 }); 67 // 素朴に2重ループで重複検出 68 for(var i = 0; i < obj.length; i++) { 69 for(var j = 0; j < obj.length; j++) { 70 var duplicated = (obj[i].firstThreeChars == obj[j].firstThreeChars); 71 var sameIndex = (i == j); 72 if(!sameIndex && duplicated) { 73 obj[i].duplicated = true 74 } 75 } 76 } 77 78 // 重複していないものだけを結果として返却 79 return obj.reduce(function(ret, elm) { 80 if(elm.duplicated == false) { 81 ret.push(elm.str); 82 } 83 return ret; 84 }, []); 85 } 86 87 function rejectDup2(elements) { 88 // もともとの文字列に加えて 重複しているか否かを判定できるよう設定値を追加 89 var obj = elements.map(function(elm) { 90 return { 91 str: elm, 92 firstThreeChars: firstThreeChars(elm), 93 duplicated: false 94 } 95 }); 96 // 素朴に2重ループで重複検出 97 for(var i = 0; i < obj.length; i++) { 98 for(var j = 0; j < obj.length; j++) { 99 var duplicated = (obj[i].firstThreeChars == obj[j].firstThreeChars); 100 var sameIndex = (i == j); 101 if(!sameIndex && duplicated) { 102 obj[i].duplicated = true 103 } 104 } 105 } 106 107 return obj.reduce(function(bad, elm) { 108 if(elm.duplicated == true) { 109 bad.push(elm.str); 110 } 111 return bad; 112 }, []); 113 } 114 115 116 117 $('.button').click(function(){ 118 var str = $('#input').val(); 119 120 var result = rejectDup(str.split("\n")); 121 $('.box').text(result); 122 var box = $('.box').text(); 123 $('#output').html(box.replace(/\"],/g, '\"],\n')); 124 125 var result2 = rejectDup2(str.split("\n")); 126 $('.box2').text(result2); 127 var box2 = $('.box2').text(); 128 $('#output2').html(box2.replace(/\"],/g, '\"],\n')); 129 130 }); 131 132 })(); 133 </script> 134</body> 135</html>

こんな風に、前13文字が重複しているものは右側のテキストエリアに、重複していないものは左側のテキストエリアに表示するようにしたのですが、望んでいるものは、例えば
(n =1とします)
1
2
2
2
3
3
と入力すれば,
1
2
3
となるように重複を除くけど、1つは残すようにしたいのです。

そして入力するデータは
["A310050015",4,2,"name","subject","room","http://ssss.com=1"],
["A310050015",4,2,"name","subject","room","http://ssss.com=2"]
..
のような形式なのですが、左側のコード等が同じなのに、右端のURLの値が僅かに違うので、こういうものを作りたいと思っています。
データの1行1行が配列なのでreplace(/"],/g, '"],\n')などを使っています。

アドバイスよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/04/12 16:44

ご自身で書かれたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが解決につながると思います。
yambejp

2017/04/13 00:17

プログラム上n文字とは0文字も含むため、n文字の提供の仕方を書かない限り2行目以降全行削除になります
退会済みユーザー

退会済みユーザー

2017/04/13 03:14

補足しました。よろしくお願いします。
guest

回答2

0

丸投げではなく、ヒントが欲しいとの事だったのでこの辺の関数を使えば実装できそうですね。
分かっている部分をコードで書き表すとより良い質問になると思います。

Re: cloudspider さん

投稿2017/04/12 16:29

think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

  • 文字列は配列と同様、インデックスを指定できる
  • Array.apply() でサイズとインデックス値を対応させた配列が生成できる
  • ループ処理で配列内の値を比較できる
  • Array.prototype.reduce() で重複排除できる

といったことが可能であれば、以下のように書くことが出来るのではないでしょうか

javascript

1function firstThreeChars(elm) { 2 // 配列の生成 [0, 1, 2] 3 // 配列をmap で回して index 指定値として利用 4 // 文字列から最初の3字を抜き出す 5 return Array.apply(null, Array(3)) 6 .map(function(_, i) { return elm[i] }).join('') 7} 8 9function rejectDup(elements) { 10 // もともとの文字列に加えて 重複しているか否かを判定できるよう設定値を追加 11 var obj = elements.map(function(elm) { return {str: elm, firstThreeChars: firstThreeChars(elm), duplicated: false} }) 12 13 // 素朴に2重ループで重複検出 14 for(var i = 0; i < obj.length; i++) { 15 for(var j = 0; j < obj.length; j++) { 16 var duplicated = (obj[i].firstThreeChars == obj[j].firstThreeChars) 17 var sameIndex = (i == j) 18 if(!sameIndex && duplicated) { obj[i].duplicated = true } 19 } 20 } 21 22 // 重複していないものだけを結果として返却 23 return obj.reduce(function(ret, elm) { 24 if(elm.duplicated == false) { ret.push(elm.str) } 25 return ret 26 }, []) 27} 28 29var str = `foo 30bar 31bool 32barbar 33foooo! 34たろう 35たろうまる` 36 37var result = rejectDup(str.split("\n")) 38console.log(result) // => [ 'bool' ]

何か参考になれば幸いです

Link

投稿2017/04/12 17:45

gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/13 03:15

回答ありがとうございました。 参考にさせていただき作ってみました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問