2016-06-11 13 views
-1

は、私はこのような配列があります。要素の一部が別の配列にある場合、ループされた配列内の要素をマージする方法はありますか?

var arr = [ 
     [11, 12, 13, 14], 
     [1, 2, 3, 4], 
     [3, 4, 5], 
     [5, 6, 7, 8], 
     [6, 7, 8 , 9] 
]; 

私は別の配列内の値を持つ配列を連結し、この場合にはように、その重複を削除したいと思い、それはすべき出力:

var arr = [ 
      [11, 12, 13, 14], 
      [1, 2, 3, 4, 5, 6, 7, 8, 9] 

    ]; 

どれでも役立つだろう感謝する。ありがとうございました!

+2

その結果、注文を維持する必要がありますか? –

+0

あなたは何を試しましたか? –

+4

あなたの試行を表示してください...これはコーディングサービスではありません。アイデアは間違いから学ぶことです...自由な仕事はあなたのために行われません – charlietfl

答えて

1

あなたは、あなたがこのように使用する場合は、すべてのうち重複した値を配列に来るこの

var arr = [ 
 
    [11, 12, 13, 14], 
 
    [1, 2, 3, 4], 
 
    [3, 4, 5], 
 
    [5, 6, 7, 8], 
 
    [6, 7, 8, 9] 
 
]; 
 

 
// iterate and generate the array 
 
var res = arr.reduce(function(r, el) { 
 
    var ind; 
 
    // check any elemnt found in already pushed array elements 
 
    if (r.some(function(v, i) { 
 
    // cache the index if match found we need to use this for concatenating 
 
    ind = i; 
 
    return v.some(function(v1) { 
 
     return el.indexOf(v1) > -1; 
 
    }) 
 
    })) { 
 
    // if element found then concat and filter to avoid duplicates 
 
    r[ind] = r[ind].concat(el).filter(function(v, i, arr1) { 
 
     return arr1.indexOf(v) == i; 
 
    }) 
 
    } else 
 
    // otherwise filter and push the array 
 
    r.push(el.filter(function(v, i, arr1) { 
 
    return arr1.indexOf(v) == i; 
 
    })) 
 
    return r 
 
}, []); 
 

 
console.log(res);

+0

最高です。ありがとうございました! – astrasleepz

+0

@astrasleepz:お手伝いをしてうれしい –

0

ような何かを行うことができます。それはあなたのindexOfなし

<script> 
 
    var arr = [ 
 
     [11, 12, 13, 14], 
 
     [1, 2, 3, 4], 
 
     [3, 4, 5], 
 
     [5, 6, 7, 8], 
 
     [6, 7, 8, 9] 
 
    ]; 
 
    var newArr = []; 
 
    for (var i = 0; i < arr.length; i++) { 
 
     newArr = newArr.concat(arr[i]); 
 
    } 
 
    var tmp = []; 
 
    for (var i = 0; i < newArr.length; i++) { 
 
     if (tmp.indexOf(newArr[i]) == -1) { 
 
      tmp.push(newArr[i]); 
 
     } 
 
    } 
 
    alert(tmp); 
 
    </script>

0

提案を助けるかもしれません。

var arr = [[11, 12, 13, 14], [1, 2, 3, 4], [3, 4, 5], [5, 6, 7, 8], [6, 7, 8, 9]], 
 
    temp = Object.create(null), i = 0, index; 
 

 
while (i < arr.length) { 
 
    if (arr[i].some(function (b) { 
 
     if (b in temp) { 
 
      index = temp[b];    
 
      return true; 
 
     } 
 
     temp[b] = i; 
 
    })) { 
 
     arr[i].forEach(function (b) { 
 
      if (temp[b] !== index) { 
 
       arr[index].push(b); 
 
       temp[b] = index; 
 
      }      
 
     }); 
 
     arr.splice(i, 1); 
 
     continue; 
 
    } 
 
    i++; 
 
} 
 
    
 
console.log(arr);

0

私はArray.prototype.intersect()方法を導入することで利用することにより、これを行うしたいと思います。もちろんArray.from(new Set(p))

Array.prototype.intersect = function(a) { 
 
    return this.filter(e => a.includes(e)); 
 
}; 
 

 
var arr = [ 
 
     [11, 12, 13, 14], 
 
     [1, 2, 3, 4], 
 
     [3, 4, 5], 
 
     [5, 6, 7, 8], 
 
     [6, 7, 8 , 9] 
 
], 
 
    res = []; 
 

 
res.push(Array.from(new Set(arr.reduce((p,c) => p.intersect(c)[0] ? p.concat(c) : (res.push(Array.from(new Set(p))),c))))); 
 
console.log(JSON.stringify(res));

あなたが推測として、削除p配列dupesを返し返します。

関連する問題