我从电子表格中引入的字符串数组经常出现问题。我希望过滤这些字符串数组中的唯一值,然后在表单的下拉列表中填充选项。
我尝试过多种解决方案,但由于某种原因,它们都不起作用。
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:我给它的数据:
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 ''我想要的数据:
0 'Backpack'
1 'Biltong'
2 'Holding or Wearing'
3 'Location'
4 'Saddle Bag BL'
5 'Saddle Bag FL'
6 'Saddle Bag FR'
7 ''发布于 2022-05-04 23:03:00
你让事情变得更复杂了。您可以将其简化为如下所示:
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))。这样你就能得到所需的结果。
发布于 2022-05-04 23:05:53
我认为您可以使用javascript 新的Set()方法。作为一个例子
let arr = ['Backpack','Backpack', 'Holding or Wearing', 'Holding or Wearing','','',''];
let unique = [...new Set(arr)];
console.log(unique) // ['Backpack', 'Holding or Wearing', '']发布于 2022-05-04 23:21:10
您正在从map()返回obect,而只是返回属性
var containerOptions = containerFilterHelper.map(row => row.container);
-皮尔查德
https://stackoverflow.com/questions/72120211
复制相似问题