【问题标题】:Filtering an array against another array根据另一个数组过滤一个数组
【发布时间】:2018-06-10 13:44:33
【问题描述】:

我有 2 个这样的数组 ...

var heroes = [{
    name: "Batman",
    franchise: "DC"
  },
  {
    name: "Ironman",
    franchise: "Marvel"
  },
  {
    name: "Thor",
    franchise: "Marvel"
  },
  {
    name: "Superman",
    franchise: "DC"
  }
];

var stars = ["Thor", "Superman"];

var marvelHeroes = heroes.filter(function(hero) {
  return stars.indexOf(hero.name) >= 0;
});

console.log(marvelHeroes);

此代码返回“未定义”。所以本质上我正在尝试根据另一个数组中的值过滤一个数组。

有人可以告诉我我做错了什么吗?谢谢

我的预期输出是一个对象数组,如下所示...

[
{name: "Thor", franchise: "Marvel"},
{name: "Superman", franchise: "DC"}
];

我看到了类似的问题here,但该解决方案对我不起作用...

【问题讨论】:

  • 您要选择哪个hero?选择hero[index].name
  • 我将您的代码转换为 sn-p 并将对象记录到控制台。它按预期工作。

标签: javascript jquery


【解决方案1】:

应该只是返回stars.indexOf(item.name) !== -1 ;

演示

var heroes = [
    {name: "Batman", franchise: "DC"},
    {name: "Ironman", franchise: "Marvel"},
    {name: "Thor", franchise: "Marvel"},
    {name: "Superman", franchise: "DC"}
];

var stars = ["Thor","Superman"];

var filtered = heroes.filter(function(item) {
        return stars .indexOf(item.name) !== -1 ;
});

console.log(filtered);

【讨论】:

  • >= 0> -1
  • 因为 OP 的代码工作正常。请参阅sn-p。这个问题应该作为题外话结束。
  • 但他提到它返回未定义
  • 我明白,但为了澄清,评论就足够了。
  • 同样的问题,我不知道为什么@31piy 也否决了我的问题?人们提出问题,因为他们不确定自己的代码。这是对否决票的错误使用。
【解决方案2】:

可以使用includes判断数组是否包含某个元素

var heroes = [{name:"Batman",franchise:"DC"},{name:"Ironman",franchise:"Marvel"},{name:"Thor",franchise:"Marvel"},{name:"Superman",franchise:"DC"}];
var stars = ["Thor", "Superman"];

var marvelHeroes = heroes.filter(function(hero) {
  return stars.includes(hero.name);
});

console.log(marvelHeroes);

对于更短的代码:

var heroes = [{name:"Batman",franchise:"DC"},{name:"Ironman",franchise:"Marvel"},{name:"Thor",franchise:"Marvel"},{name:"Superman",franchise:"DC"}]
var stars = ["Thor", "Superman"];

var marvelHeroes = heroes.filter(o => stars.includes(o.name));

console.log( marvelHeroes );

文档:includes()

【讨论】:

  • 感谢@Eddie,从性能的角度来看,哪个更快? “索引”或“包括”。我的阵列很大,所以性能很重要。
  • 我喜欢使用includes(),因为它更清楚我不确定性能。
  • 嘿@Eddie,我没有投反对票,我认为是31piy,最初对我的问题以及所有答案投了反对票。请参阅上面 Sajeetharan 回复中的对话。
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
相关资源
最近更新 更多