首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么能只在数组中.filter唯一的字符串?

我怎么能只在数组中.filter唯一的字符串?
EN

Stack Overflow用户
提问于 2022-05-04 22:47:44
回答 3查看 145关注 0票数 0

我从电子表格中引入的字符串数组经常出现问题。我希望过滤这些字符串数组中的唯一值,然后在表单的下拉列表中填充选项。

我尝试过多种解决方案,但由于某种原因,它们都不起作用。

代码语言:javascript
复制
function filterContainerDropdown(){

var containerFilterHelper =  inventory.filter(obj => obj.playerid == filterID)
    
  var containerOptions = containerFilterHelper.map(row => ({

      container: row.container,
     
    }));

    const unique = (x, i, a) => a.indexOf(x) == i;
     
    var uniqueContainers = containerOptions.filter(unique);

     console.log('')
     console.log('++++++++uniqueContainers+++++++++++')
     console.table(uniqueContainers); 

    for(var i = 0; i < containerOptions.length; i++) {

      setContainer[setContainer.length] = new Option(containerOptions[i].container,containerOptions[i].container)
        
    }

  }

我在网上尝试过解决方案。它们与其他数据一起工作。我的数据是短字符串的列表。

编辑:是否存在为唯一值过滤字符串的众所周知的问题?

EDIT2:我给它的数据:

代码语言:javascript
复制
0   'Backpack'
1   'Backpack'
2   'Backpack'
3   'Backpack'
4   'Backpack'
5   'Backpack'
6   'Backpack'
7   'Backpack'
8   'Backpack'
9   'Backpack'
10  'Backpack'
11  'Backpack'
12  'Backpack'
13  'Backpack'
14  'Biltong'
15  'Biltong'
16  'Biltong'
17  'Biltong'
18  'Holding or Wearing'
19  'Holding or Wearing'
20  'Holding or Wearing'
21  'Holding or Wearing'
22  'Holding or Wearing'
23  'Holding or Wearing'
24  'Holding or Wearing'
25  'Holding or Wearing'
26  'Holding or Wearing'
27  'Holding or Wearing'
28  'Holding or Wearing'
29  'Holding or Wearing'
30  'Holding or Wearing'
31  'Holding or Wearing'
32  'Holding or Wearing'
33  'Holding or Wearing'
34  'Holding or Wearing'
35  'Holding or Wearing'
36  'Holding or Wearing'
37  'Holding or Wearing'
38  'Holding or Wearing'
39  'Holding or Wearing'
40  'Holding or Wearing'
41  'Location'
42  'Location'
43  'Location'
44  'Location'
45  'Location'
46  'Saddle Bag BL'
47  'Saddle Bag FL'
48  'Saddle Bag FR'
49  ''
50  ''
51  ''
52  ''
53  ''
54  ''
55  ''
56  ''
57  ''
58  ''
59  ''
60  ''
61  ''
62  ''
63  ''
64  ''

我想要的数据:

代码语言:javascript
复制
 0  'Backpack'   
 1  'Biltong'   
 2  'Holding or Wearing'      
 3  'Location'        
 4  'Saddle Bag BL'
 5  'Saddle Bag FL'
 6  'Saddle Bag FR'
 7  ''
EN

回答 3

Stack Overflow用户

发布于 2022-05-04 23:03:00

你让事情变得更复杂了。您可以将其简化为如下所示:

代码语言:javascript
复制
function filterContainerDropdown(){
  const values = inventory.filter(({ playerid }) => playerid == filterID)
                   .map(({ container }) => container)
                   .filter((x, i, a) => a.indexOf(x) == i)
                   .map((v) => new Option(v, v));
  setContainer.push(...values);
}

您的方法的问题是,您正在运行函数,该函数将筛选出包含对象的数组中的重复项。这将过滤掉数组中重复的对象,而不是重复的字符串。

在这里,我将对象数组映射到字符串数组(..map(({ container }) => container))。这样你就能得到所需的结果。

票数 1
EN

Stack Overflow用户

发布于 2022-05-04 23:05:53

我认为您可以使用javascript 新的Set()方法。作为一个例子

代码语言:javascript
复制
let arr = ['Backpack','Backpack',  'Holding or Wearing',  'Holding or Wearing','','',''];
let unique = [...new Set(arr)];

console.log(unique) // ['Backpack', 'Holding or Wearing', '']
票数 1
EN

Stack Overflow用户

发布于 2022-05-04 23:21:10

您正在从map()返回obect,而只是返回属性

var containerOptions = containerFilterHelper.map(row => row.container);

-皮尔查德

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72120211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档