2016-07-06 12 views
0

StackOverflowだけでなく、Web上の他の多くの場所で高低を検索しました。私はすべてのように見えるものを試しましたが、何かが私のロジックに根本的に欠陥があります。私は別の「Duplicates in Array」の質問をお詫びしますが、私は立ち往生しており、何も期待どおりに働いていないようです。多次元Javascript配列で重複を返す

とにかく、私は多次元JavaScript配列を持っていますが、2レベルしかありません。私がする必要がどのような

var array = [[Part #, Description, Qty:], 
      [Part #, Description, Qty:], 
      [Part #, Description, Qty:]]; //etc 

arrayを検索し、重複「部品番号」の行を返す関数を作成することです。それらが返されると、内部配列全体が返され、説明と量が完成します。

これは、 'duplicate'が異なる(特に最後の4文字)という条件を満たすPart#のものであるため、String.prototype.substrを使用すると意味があります。

私は探している方法で配列に重複があることを知っていますので、解決策があれば、それらのPart#を返すことになります。ここで

は私がこれまでに私の解決策に最も近い取得することを試みているものです:

function findDuplicateResults(arr) { 
var result = []; 
for (var i = 0; i < arr.length; i++) { 
    if (arr[i][0].substr(0,5) === arr[++i][0].substr(0,5)) { 
     result.push(arr[i]);  
    } 
} 
return console.log(result); 

}

私の思考があるが、その場合のsubstrを持つ配列(の要素(0,5 )が次の行と同じであれば、結果の配列にそれをプッシュする必要があります。コードのポイントは、substr(0,5)を持つダプだけを表示することです。

I にはがあります。 forEach、reduce、and filter(なぜ私が望むことをしないのかということについて私の心に邪魔されているものをフィルタリングしている)が、[]またはそのような配列全体を返すことしかできませんでした。上記高次関数のために私が使用するロジックは同じです(これはおそらくここでの問題です)。

私のifの状態は、問題のほとんどがどこにあるかと期待しています。どんなポインタや解決策も大変ありがとうございます。

答えて

0

コードに間違いがあります。 ++iを使用すると、iの値が変更されるため、次の反復で1つの項目をスキップします。 「SUBSTR」はドロップすることができ、が

function findDuplicateResults(arr) { 
    var result = []; 
    for (var i = 0; i <= arr.length - 1; i++) { 
    for (var k = 0; k <= arr.length - 1; k++) { 
     if (i !== k && arr[i][0].substr(0,5) === arr[k][0].substr(0,5)) { 
     result.push(arr[i]); 
     } 
    } 
    } 
    return result; 
} 

、および ':ロジックについて

、あなただけあなたが本当にすべてのアイテムに、各項目を比較する必要があるとき、次の項目に一つの項目を比較しますfor 'ループは高階関数に置き換えることができます:

function findDuplicateResults(arr) { 
    return arr.filter(function(item1){ 
    return arr.filter(function(item2){ 
     return item1[0] === item2[0]; 
    }).length > 1; 
    }); 
} 
+0

ありがとうございました!クイックフォローアップ、なぜarr.length - 1?残りの部分は完璧な意味がありますが、私はその1つのビットに固執しています。再度、感謝します! –

+0

配列にはインデックスがありません。 1つの項目を持つ配列があるとします。 array.lengthは1です今度は、配列内の項目にアクセスしたいとします。 array [1]は存在しないため、動作しません。あなたのアイテムは配列[0]、または配列[array.length - 1] –

+0

で、私は '<'の代わりに '<='を使っていたはずです。更新された回答を確認する –

関連する問題