我有arr
类别树。示例:类别yy
是ww
的子类别,ww
是zz
的子类别。我想过滤此数组并获得此输出:['aa_bb', 'aa_cc', 'zz_ww_yy']
。所以我不想要zz
和zz_ww
,因为我在zz_ww_yy
中有这个。我认为我必须使用过滤功能,也许还有一些正则表达式?嗯,也许是foreach?你怎么想?
var arr = ['aa_bb', 'aa_cc', 'aa', 'zz', 'zz_ww','zz_ww_yy'];
var filtered = arr.filter(function(a){
//???
})
console.log(filtered);
答案 0 :(得分:2)
您可以使用String#indexOf
并使用给定的字符串过滤临时结果数组。
然后检查字符串是否不是结果集的子字符串,如果不是则将其推送。
var array = ['aa_bb', 'aa_cc', 'aa', 'zz', 'zz_ww','zz_ww_yy'],
result = array.reduce(function (r, a) {
r = r.filter(b => a.indexOf(b) === -1);
if (r.every(b => b.indexOf(a) === -1)) {
r.push(a);
}
return r;
}, []);
console.log(result);

答案 1 :(得分:0)
尝试一下,你可以轻松地改变逻辑。
var arr = ['aa_bb', 'aa_cc', 'aa', 'zz', 'zz_ww', 'zz_ww_yy'];
function shoulFilterCategory(arr, itemToTest, itemIndex) {
var shouldFilter = false;
arr.filter((item, index) => index !== itemIndex)
.forEach(item => {
if (item.startsWith(itemToTest) && itemToTest.length < item.length) {
shouldFilter = true;
}
});
return shouldFilter;
}
var filtered = arr.filter(
(item, index) => !shoulFilterCategory(arr, item, index)
);
console.log('filtered', filtered);
&#13;