私は次の結果を達成しようとしています。 私はテキストエリアを持っています、このテキストエリア内に入力されるすべてのテキストを(行単位で)配列に変換したいと思います。テキストが入力されたら、エントリに重複があるかどうか確認したい。javascriptが配列エラーで重複を見つける
は、これを行うために、I: 1)TEXTAREA 2)私は重複がすべての値を介して 3)Iループ値)以下checkArrayという名前の配列を(作成から以下の配列(名前myarrayfromtextareaを)作成私の最初の配列では、私は2番目の配列の一致を確認します。
理論的には、それがうまく動作しますが、私は、テキストエリアに入力し、次の値を試してみました:
- dwdw
- dwdwdwdwdwdwdwdw
- dwdwdwdw
- dwdwdwdw
dwdwdwdwdwdwdwdwdwdw私は1つの重複を見つけることを期待した(行3と4)しかし信じられないほど、私は - > checkArray.indexOf(array [i])を実行すると、行1は一致を示しています。
私を助けることができますか?
var myarrayfromtextarea = $('#My_textarea').val().split('\n'); // create array from textarea
console.log("array from textarea: " + myarrayfromtextarea)
var myArr = myarrayfromtextarea; /// here I start to find duplicates
var obj = {};
var checkArray = "["
myArr.forEach(function(item) {
if (typeof obj[item] == 'number') {
checkArray = checkArray + item + ",";
obj[item]++;
} else {
obj[item] = 1;
}
});
checkarraylenght = (checkArray.length - 1)
checkArray = checkArray.substring(0, checkarraylenght)
checkArray = checkArray + "]" + '';
console.log("checkarray = " + checkArray)
myarrayfromtextarea = myarrayfromtextarea + '';
var array = myarrayfromtextarea.split(',');
var arrayLength = array.length;
for (var i = 0; i < arrayLength; i++) {
if (checkArray.indexOf(array[i]) == -1) {
console.log("Not a duplicate: " + array[i]);
} else {
console.log("Duplicate value: " + array[i]);
}
//Do something
}
'checkArray'が文字列であるので、あなたがアレイ#のindexOf'とは反対に、部分的な一致を返す '文字列#indexOf'を使用しています'これは正確な一致を返すだけです。しかし、実際には 'checkArray'変数には何の指摘もありません。値を持つオブジェクトを既に作成しています。キーを繰り返して、 'obj [key]> 1'があるかどうかを確認してください。そうであれば、重複があることを知っています。 – mhodges
文字列/配列についてのあなたの説明を理解していますが、コードを変更して動作させる方法が少し失われています。 –
Taplarの解説を参照してください。配列の文字列解釈ではなく、実際の配列を使用します。 – mhodges