2017-04-24 63 views
0

无法通过所有阵列了解如何循环并将其推入一个避免重复,这样我就可以有这样的结果:合并数目不详阵列没有重复

['All', 'Images', 'Video'] 

到目前为止,我现在有下面,但并不预期:

let filterize = function(el, config){ 
 
\t let target = document.getElementById(el); 
 
\t let arrayCommon; 
 
\t for(let value in config) { \t \t 
 
\t \t arrayCommon = [...new Set([...config[value].filter])]; 
 
\t } 
 
\t 
 
\t console.log(arrayCommon) 
 
\t 
 
\t 
 
} 
 

 
var filterize_init = new filterize('Filtered', { 
 
\t element_1: { 
 
\t \t filter: ['All', 'Image'] 
 
\t }, 
 
\t element_2: { 
 
\t \t filter: ['All', 'Video'] 
 
\t } 
 
})
<div class="wrapper"> 
 
\t <div id="Filtered" class="filter-content"> 
 
\t \t 
 
\t </div> 
 
</div>

谁能帮助?

+0

的可能的复制[如何合并在Javascript两个数组并删除重复的项目](http://stackoverflow.com/questions/1584370/how-to-merge-two-arrays-in-javascript-and-de-duplicate-items) – George

+0

是的,我读过那个话题......但是已知数量的数组。现在这就是我的问题。不能理解如何遍历所有(未知数)数组,可以由用户添加:它可能是两个或更多。 – NeedHate

+0

循环中的行覆盖之前的arrayCommon,而不是添加到它。 – nnnnnn

回答

2

如果你可以转换你的config是一个数组的数组,然后你可以调用.concat()与他们同副本合并成一个单一阵列。然后用Set后删除重复项:

let filterize = function(el, config){ 
 
    let working = Object.keys(config).map(e => config[e].filter); 
 
    let arrayCommon = [...new Set([].concat(...working))]; 
 

 
    console.log(arrayCommon); \t 
 
} 
 

 
var filterize_init = new filterize('Filtered', { 
 
\t element_1: { 
 
\t \t filter: ['All', 'Image'] 
 
\t }, 
 
\t element_2: { 
 
\t \t filter: ['All', 'Video'] 
 
\t }, 
 
\t element_3: { 
 
\t \t filter: ['All', 'Whatever', 'Video', 'Image', 'Test'] 
 
\t } 
 
})

+0

'[] .concat(... working)'也可以工作 – georg

+1

@georg - 哦,当然。答案已更新。谢谢。 (我仍然习惯于发布不使用新操作符的答案,以便代码可以在IE中工作,但当然代码的其他部分已经使用'...',所以......) – nnnnnn

+0

我也是。点差需要一些时间才能习惯。 ;) – georg