小编sno*_*y25的帖子

如果元素中已存在元素,请不要再次添加

我有一个对象数组,如下所示:

var array = [
    {id:123, value:"value1", name:"Name1"},
    {id:124, value:"value2", name:"Name1"},
    {id:125, value:"value3", name:"Name2"},
    {id:126, value:"value4", name:"Name2"}
    ...
];
Run Code Online (Sandbox Code Playgroud)

如您所见,有些名称会重复出现.我想获得一个只有名字的新数组,但是如果某些名称重复,我不想再添加它.我想要这个数组:

var newArray = ["Name1", "Name2"];
Run Code Online (Sandbox Code Playgroud)

我正在尝试这样做map:

var newArray = array.map((a) => {
    return a.name;
});
Run Code Online (Sandbox Code Playgroud)

但问题是这会返回:

newArray = ["Name1", "Name1", "Name2", "Name2"];
Run Code Online (Sandbox Code Playgroud)

我怎样才能在里面设置一些条件map,所以它不会返回已经存在的元素?我想用map或其他一些ECMAScript 5或ECMAScript 6功能.

javascript arrays

97
推荐指数
7
解决办法
6万
查看次数

按多个键和值过滤,Javascript

我正在尝试制作过滤器。过滤器的数量会动态变化,键的数量可以不同,值的数量也是如此。

这是数据的样子:

var data = [
{id: "123", color: "Red", model: "Tesla"}, 
{id: "124", color: "Black", model: "Honda"}, 
{id: "125", color: "Red", model: "Audi"}, 
{id: "126", color: "Blue", model: "Tesla"}]
Run Code Online (Sandbox Code Playgroud)

过滤键是颜色和型号。但有时我会只按颜色或型号过滤,有时两者都过滤。我想创建一个涵盖这两种情况的函数。此外,用户可以选择许多值(特斯拉、本田...)。

键可以只有颜色,也可以只有型号,或者两者都有。值可能看起来像:只有“红色”、“红色”和“蓝色”,或“红色”和“特斯拉”,或“红色”、“蓝色”和“特斯拉”......取决于用户选择什么。

我试过这个:

var filtered = [];
data.forEach(item => {
   filterByKey.forEach(key => {
      values.forEach(value => {
         if (item[key] === value) {
             filtered.push(item);
          }
       });
    });
  });
Run Code Online (Sandbox Code Playgroud)

这是JsFiddle

当我有一个过滤键时,我的循环效果很好,但当我有多个键时,它就不好用了。将键和值作为数组传递是个好主意吗?

请不要使用 jQuery,只使用纯 JavaScript。

javascript filter

6
推荐指数
3
解决办法
8850
查看次数

如何合并多个可观察到的RxJS的结果?

我正在学习RxJS,并试图用之前的Promise替换一些我做过的代码,但是我一直在努力寻找正确的方法来组合可观察的对象。

我有一个调用多个API的代码,并且每个API调用都执行相同的代码。而且,在完成API调用之后,我还有一些其他代码只能执行一次,并且只能执行一次。我用Promises做到了这一点,我做了多个Promises,对于每个Promise,我执行相同的代码,然后Promise.all()我执行其他代码。

所以我试图用RxJS做到这一点:

var apiCallIterator = ["id1", "id2", id3];
var apiCallObservable = from(apiCallIterator)
  .pipe(
    mergeMap(apiCallIterator => {
      return makeAnApiCall();
    })
   );

apiCallObservable.subscribe({
next: value => {
 // do some code for each API call
},
error: () => {
 // api call failed
}
})
Run Code Online (Sandbox Code Playgroud)

这对于我的任务的第一部分效果很好,它将在每次API调用完成后执行相同的代码。但是在所有API调用完成之后,我找不到一种将所有结果都集中到一个位置的方法。

也许我从一开始就做错了,但是这部分似乎对我来说很好。

javascript rxjs

1
推荐指数
1
解决办法
2753
查看次数

标签 统计

javascript ×3

arrays ×1

filter ×1

rxjs ×1