如何过滤掉我的对象数组中所有不需要的名称?

How do I filter out all the undesired names in my array of objects?

我想排除一些类别名称,但开关和传统 if 语句中的 if 检查不起作用。我还想翻译任何似乎不适用的阿拉伯语和英语内容 - 任何帮助将不胜感激!

切换语句:

// function customBuildFunction(cats,qty) {
//     var valid_cats = [];
//     for (var i=0; i < cats.length; i++) {
//         switch(true) {
//             case (cats[i].name != 'NA'):  
//             case (cats[i].name != 'New In'):
//             case (cats[i].name != 'Sale'):  
//             case (cats[i].name != 'Card Holders'):
//             case (cats[i].name != 'Bags & Accessories'):      
//             case (cats[i].name != 'Heels'):
//             case (cats[i].name != 'Sneakers'):        
//             case (cats[i].name != 'Flats'):   
//             case (cats[i].name != 'Sandals'): 
//             case (cats[i].name != 'Boots'):
//             case (cats[i].name != 'Pumps'):
//             case (cats[i].name != 'Shoes'):       
//             case (cats[i].name != 'Bags'):
//             case (cats[i].name != 'Loafers & Slippers'):
//             case (cats[i].name != 'Mules'):   
//             case (cats[i].name != 'Men'):
//             case (cats[i].name != 'Women'):
//             case (cats[i].name != 'Kids'): 
//             case (cats[i].name != 'Baby'):                    
//                 valid_cats.push(cats[i].name)
//                 break;
          
//         }
//     }
//      // console.log('valid cats', valid_cats)
//      var uniqueBrands = [...new Set(valid_cats)]
//      var uniqueValidCats = uniqueBrands.filter(e => e)

//     console.log('unique', uniqueValidCats);
//     var innerHTML = ''
//     // console.log(qty);
//     for (var j=0; j<qty; j++) {
//          innerHTML += '<div class="container"> ' + '<div class="brands">' + uniqueValidCats[j] + '</div>' + '</div>'
// }
//     return innerHTML
// }

我尝试存储翻译阿拉伯字符串的传统 for 循环:


function customBuildFunction(cats,qty,template,title) {
    var valid_cats = [];
    var str = [];
    var regex = /^[\p{Arabic}\s\p{N}]+$/gm
    console.log('cats', cats)
    for (var i=0; i < cats.length; i++) {
        if (cats[i].name != 'NA' || cats[i].name != 'New In' || cats[i].name != 'Sale' || cats[i].name != 'Card Holders' || cats[i].name != 'Bags & Accessories' || cats[i].name != 'Heels' || cats[i].name != 'Sneakers' || cats[i].name != 'Flats' || cats[i].name != 'Sandals' || cats[i].name != 'Boots' || cats[i].name != 'Pumps' || cats[i].name != 'Shoes' || cats[i].name != 'Bags' || cats[i].name != 'Loafers & Slippers' || cats[i].name != 'Mules' || cats[i].name != 'Men' || cats[i].name != 'Women' || cats[i].name != 'Kids' || cats[i].name != 'Baby') {
            str.push(cats[i].name.replace(regex))
            valid_cats.push(cats[i].name)
        }
    }
        var uniqueBrands = [...new Set(valid_cats)]
        var uniqueValidCats = uniqueBrands.filter(e => e)

    // console.log('unique', uniqueValidCats);
    console.log('str', str);

    var innerHTML = ''
    // console.log(qty);
    for (var j=0; j<qty; j++) {
        innerHTML += '<div class="container"> ' + '<div class="brands">' + uniqueValidCats[j] + '</div>' + '</div>'
}
    return innerHTML
}

这是我正在遍历的猫的回复:

cats 
(25) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {rectype: 'CAT', name: 'Sandals'}
1: {rectype: 'CAT', name: 'Shoes'}
2: {rectype: 'CAT', name: 'Mules'}
3: {rectype: 'CAT', name: 'BALENCIAGA'}
4: {rectype: 'CAT', name: 'جديدنا'}
5: {rectype: 'CAT', name: 'Boots'}
6: {rectype: 'CAT', name: 'JIMMY CHOO'}
7: {rectype: 'CAT', name: 'Men'}
8: {rectype: 'CAT', name: 'New In'}
9: {rectype: 'CAT', name: 'Pumps'}
10: {rectype: 'CAT', name: 'ADIDAS'}
11: {rectype: 'CAT', name: 'جيمي تشو'}
12: {rectype: 'CAT', name: 'Sneakers'}
13: {rectype: 'CAT', name: 'Bags & Accessories'}
14: {rectype: 'CAT', name: 'Baby'}
15: {rectype: 'CAT', name: 'NA'}
16: {rectype: 'CAT', name: 'Women'}
17: {rectype: 'CAT', name: 'NIKE'}
18: {rectype: 'CAT', name: 'Kids'}
19: {rectype: 'CAT', name: 'Flats'}
20: {rectype: 'CAT', name: 'Heels'}
21: {rectype: 'CAT', name: 'Loafers & Slippers'}
22: {rectype: 'CAT', name: 'CHANEL'}
23: {rectype: 'CAT', name: 'Card Holders'}
24: {rectype: 'CAT', name: 'Bags'}
length: 25
[[Prototype]]: Array(0)

从上面的评论...

"Even though unicode escape is supported in JS, the language specific letter escaping like \p{Arabic} is not. But if it is about filtering all items with their name only featuring non latin word characters sequences then the OP can filter the last shown array data just by e.g. ... sampleData.filter(({ name }) => (/^\W+$/).test(name))."

const sampleData = [
  { rectype: 'CAT', name: 'Sandals'},
  { rectype: 'CAT', name: 'Shoes'},
  { rectype: 'CAT', name: 'Mules'},
  { rectype: 'CAT', name: 'BALENCIAGA'},
  { rectype: 'CAT', name: 'جديدنا'},
  { rectype: 'CAT', name: 'Boots' },
  { rectype: 'CAT', name: 'JIMMY CHOO' },
  { rectype: 'CAT', name: 'Men' },
  { rectype: 'CAT', name: 'New In' },
  { rectype: 'CAT', name: 'Pumps' },
  { rectype: 'CAT', name: 'ADIDAS' },
  { rectype: 'CAT', name: 'جيمي تشو' },
  { rectype: 'CAT', name: 'Sneakers' },
  { rectype: 'CAT', name: 'Bags & Accessories' },
  { rectype: 'CAT', name: 'Baby' },
  { rectype: 'CAT', name: 'NA' },
  { rectype: 'CAT', name: 'Women' },
  { rectype: 'CAT', name: 'NIKE' },
  { rectype: 'CAT', name: 'Kids' },
  { rectype: 'CAT', name: 'Flats' },
  { rectype: 'CAT', name: 'Heels' },
  { rectype: 'CAT', name: 'Loafers & Slippers' },
  { rectype: 'CAT', name: 'CHANEL' },
  { rectype: 'CAT', name: 'Card Holders' },
  { rectype: 'CAT', name: 'Bags' },
];

console.log(
  sampleData.filter(({ name }) => (/^\W+$/).test(name))
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

如果另外还想匹配(与语言无关)所有仅由大写字母和空格组成的名称,则将过滤器稍微更改为 ...

const sampleData = [
  { rectype: 'CAT', name: 'Sandals'},
  { rectype: 'CAT', name: 'Shoes'},
  { rectype: 'CAT', name: 'Mules'},
  { rectype: 'CAT', name: 'BALENCIAGA'},
  { rectype: 'CAT', name: 'جديدنا'},
  { rectype: 'CAT', name: 'Boots' },
  { rectype: 'CAT', name: 'JIMMY CHOO' },
  { rectype: 'CAT', name: 'Men' },
  { rectype: 'CAT', name: 'New In' },
  { rectype: 'CAT', name: 'Pumps' },
  { rectype: 'CAT', name: 'ADIDAS' },
  { rectype: 'CAT', name: 'جيمي تشو' },
  { rectype: 'CAT', name: 'Sneakers' },
  { rectype: 'CAT', name: 'Bags & Accessories' },
  { rectype: 'CAT', name: 'Baby' },
  { rectype: 'CAT', name: 'NA' },
  { rectype: 'CAT', name: 'Women' },
  { rectype: 'CAT', name: 'NIKE' },
  { rectype: 'CAT', name: 'Kids' },
  { rectype: 'CAT', name: 'Flats' },
  { rectype: 'CAT', name: 'Heels' },
  { rectype: 'CAT', name: 'Loafers & Slippers' },
  { rectype: 'CAT', name: 'CHANEL' },
  { rectype: 'CAT', name: 'Card Holders' },
  { rectype: 'CAT', name: 'Bags' },
];

console.log(
  sampleData.filter(({ name }) =>
    (/^\W+$/).test(name) ||
    (/^[\p{Lu}\p{Z}]+$/u).test(name)
  )
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

基于 blacklist 的方法可以涵盖任何其他过滤条件(其中根据不允许的列表检查当前值值)其中一个与前一个大写测试相结合...

const sampleData = [
  { rectype: 'CAT', name: 'Sandals'},
  { rectype: 'CAT', name: 'Shoes'},
  { rectype: 'CAT', name: 'Mules'},
  { rectype: 'CAT', name: 'BALENCIAGA'},
  { rectype: 'CAT', name: 'جديدنا'},
  { rectype: 'CAT', name: 'Boots' },
  { rectype: 'CAT', name: 'JIMMY CHOO' },
  { rectype: 'CAT', name: 'Men' },
  { rectype: 'CAT', name: 'New In' },
  { rectype: 'CAT', name: 'Pumps' },
  { rectype: 'CAT', name: 'ADIDAS' },
  { rectype: 'CAT', name: 'جيمي تشو' },
  { rectype: 'CAT', name: 'Sneakers' },
  { rectype: 'CAT', name: 'Bags & Accessories' },
  { rectype: 'CAT', name: 'Baby' },
  { rectype: 'CAT', name: 'NA' },
  { rectype: 'CAT', name: 'Women' },
  { rectype: 'CAT', name: 'NIKE' },
  { rectype: 'CAT', name: 'Kids' },
  { rectype: 'CAT', name: 'Flats' },
  { rectype: 'CAT', name: 'Heels' },
  { rectype: 'CAT', name: 'Loafers & Slippers' },
  { rectype: 'CAT', name: 'CHANEL' },
  { rectype: 'CAT', name: 'Card Holders' },
  { rectype: 'CAT', name: 'Bags' },
];

console.log(
  sampleData.filter(({ name }) =>
    (/^\W+$/).test(name)
    || (
      (/^[\p{Lu}\p{Z}]+$/u).test(name)
      && !['NA'].includes(name)
    )
  )
);
.as-console-wrapper { min-height: 100%!important; top: 0; }