web-dev-qa-db-ja.com

2つの配列を比較して一致する値を探すforループ

相互に確認する必要がある2つの配列があり、各配列内の両方の項目が実際に同じになるポイントに達した場合は、どこかにhtmlを追加します。

ここに、私が例として試しているコードの一部を示します。

var daysArray = ["1", "2", "3", "4", "5"];
var courseHwork = ["4", "8", "15", "16", "23", "42"];

したがって、上記の配列には、一致する値が1つだけあり、「4」

次は次の部分です。

for (var i = 0; i < courseHwork.length; i++) {
//in my actual code courseHwork contains several objects, each of which 
//has a duedate property, so here I want to see if this part of the duedate 
//property is equal to any position in the daysArray array.
   if (courseHwork[i].duedate.substring(8,10) === daysArray[i]) {
//here I mean to select an element of this class that contains a string 
//that is equal to that of the matching positions in both arrays. then 
//once found it should take the title property from one of the objects in the
//courseHwork array and append it there.
   $('.fc-day-number:contains("'+daysArray[i]+'")').append("<div class='assignment'>"+courseHwork[i].title+"</div><br />");
        }
        }

物事が計画通りに機能した場合、文字列「4」を含むdivを見つけ、courseHwork配列内の一致するオブジェクトからプロパティ「title」を追加します。

注:私の実際のdaysArrayは数字を文字列「1」〜「31」として扱い、オブジェクトのcourseHwork配列は動的に設定されるため、任意の数のオブジェクトを含めることができますが、部分文字列が見つかりました。

* QUESTION:どのように2つの配列をループし、そのたびに値が一致するか2つの配列の間に見つかった場合、まったく同じ値を含むhtml要素が見つかり、それに何かが追加されましたか?*

15
captainrad

ここに私が思いついたアイデアがあります:

var daysArray = ["1", "2", "3", "4", "5", "12"];
var courseHwork = ["4", "8", "15", "16", "23", "42", "12"];

for (var i = 0; i < courseHwork.length; i++) {
    for (var j = 0; j < daysArray.length; j++) {
        if (courseHwork[i] == daysArray[j]) {
          $('div:contains("'+daysArray[j]+'")').append("<div class='assignment'>"+courseHwork[i]+" - appended</div>");
        }
    }
}

ここで動作することがわかります: http://jsfiddle.net/4cqCE/2/

さて、あなたがそれを望むかどうかを確認してください。最初に2つの配列で同じ値を探し、見つかった場合、「4」を含むdivに何かを追加します。それはあなたが望むものですか?

次に、2つの同じ値と2つのdivがあり、それぞれに値の1つが含まれている例を示します。 http://jsfiddle.net/4cqCE/3/

15
Kedor

次のようなことができます:

var daysArray = ["1", "2", "3", "4", "5"];
var courseHwork = ["4", "8", "15", "16", "23", "42"];

var arr = daysArray.concat(courseHwork);
var sorted_arr = arr.sort();
var results = [];
for (var i = 0; i < arr.length - 1; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i]) {
        results.Push(sorted_arr[i]);
    }
}

console.log(results);

ここでコードを実行できます: http://jsfiddle.net/WtEwJ/2/

これにより、重複するアイテムのみを含む新しい配列resultsが作成されます。

3
Paul

最初に array intersection を作成し、次に結果を反復処理してあなたのことをする必要があると思います...

2
Aprillion

こんにちは、lodashまたはアンダースコアを使用すると、2つの配列を簡単に交差させることができます。

_.intersection([2, 1], [2, 3]);

結果は[2]です。

Lodashドキュメント: https://lodash.com/docs/4.17.2#intersection

2
Yogesh Patel