JS过滤数组使用regexp on value

时间:2017-12-31 12:24:47

标签: javascript arrays

我有arr类别树。示例:类别yyww的子类别,wwzz的子类别。我想过滤此数组并获得此输出:['aa_bb', 'aa_cc', 'zz_ww_yy']。所以我不想要zzzz_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);

2 个答案:

答案 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;
&#13;
&#13;