Javascript 获取具有和避风港的对象的名称';在它们的数组中没有一些属性

Javascript 获取具有和避风港的对象的名称';在它们的数组中没有一些属性,javascript,arrays,object,Javascript,Arrays,Object,因此,我有一个对象数组,其中包含另一个数组,我想得到一个新的对象数组,该数组中包含特定的对象,并排除那些没有的对象。(用Javascript编写) 更具体地说。我有这样一个数组: let chars = [ { name: 'John', abilities: ['swim', 'jump', 'sing'] }, { name: 'Mark', abilities: ['run', 'jump'] }, { name: 'Bob',

因此,我有一个对象数组,其中包含另一个数组,我想得到一个新的对象数组,该数组中包含特定的对象,并排除那些没有的对象。(用Javascript编写)

更具体地说。我有这样一个数组:

let chars = [
  {
    name: 'John',
    abilities: ['swim', 'jump', 'sing']
  },
  {
    name: 'Mark',
    abilities: ['run', 'jump']
  },
  {
    name: 'Bob',
    abilities: ['swim', 'run', 'sing']
  },
  {
    name: 'Jack',
    abilities: ['jump', 'swim', 'run']
  }
];
例如,我只想得到那些会游泳和跳跃但不会跑的角色

我想制作两个类似的数组

let includeAbilities = ['swim', 'jump'];
let excludeAbilities = ['run'];
然后比较它们,但我真的不知道怎么做。你能帮我吗?

let chars=[
{
姓名:'约翰',
能力:[“游泳”、“跳跃”、“唱歌”]
},
{
姓名:'马克',
能力:[‘跑’、‘跳’]
},
{
姓名:'鲍勃',
能力:[“游泳”、“跑步”、“唱歌”]
},
{
名字:“杰克”,
能力:[“跳跃”、“游泳”、“奔跑”]
}
];
//这是ES6语法,箭头函数:char=>char.abilities.includes('swim')与
//函数(char){return char.abilities.includes('swim')};
const canSwim=chars.filter(char=>char.abilities.includes('swim');
控制台日志(canSwim);
//通过分解对象,可以使其变得更短
常数canSwimAndSing=chars.filter(({
能力
}) => {
返回能力。包括('swim')和('sing')能力。包括('sing'))
});
console.log(canSwimAndSing)
let chars=[
{
姓名:'约翰',
能力:[“游泳”、“跳跃”、“唱歌”]
},
{
姓名:'马克',
能力:[‘跑’、‘跳’]
},
{
姓名:'鲍勃',
能力:[“游泳”、“跑步”、“唱歌”]
},
{
名字:“杰克”,
能力:[“跳跃”、“游泳”、“奔跑”]
}
];
//这是ES6语法,箭头函数:char=>char.abilities.includes('swim')与
//函数(char){return char.abilities.includes('swim')};
const canSwim=chars.filter(char=>char.abilities.includes('swim');
控制台日志(canSwim);
//通过分解对象,可以使其变得更短
常数canSwimAndSing=chars.filter(({
能力
}) => {
返回能力。包括('swim')和('sing')能力。包括('sing'))
});

console.log(canSwimAndSing)我会选择一个很好的组合
Array.prototype.filter
Array.prototype.every

const filteredChars=chars.filter(character=>(
包括所有(
能力=>character.abilities.includes(能力)
) &&
排他性(
能力=>!角色。能力。包括(能力)
)
));
结果:

[
{
姓名:'约翰',
能力:[“游泳”、“跳跃”、“唱歌”]
}
]

在你的例子中,唯一匹配的角色是约翰,因为他会游泳和跳跃,但他不会跑。

我会选择一个很好的
Array.prototype.filter
Array.prototype.each

const filteredChars=chars.filter(character=>(
包括所有(
能力=>character.abilities.includes(能力)
) &&
排他性(
能力=>!角色。能力。包括(能力)
)
));
结果:

[
{
姓名:'约翰',
能力:[“游泳”、“跳跃”、“唱歌”]
}
]

在您的案例中,唯一匹配的角色是John,因为他可以游泳和跳跃,但不能跑步。

或者欢迎来到Stack Overflow!请访问,采取的,看看什么和。做一些研究,搜索相关话题等;如果您遇到问题,请发布您的尝试,使用
[]
代码段编辑器记录输入和预期输出。感谢您选择我的答案,我实际上简化了一点,使用
every()
而不是
reduce()
。请看一看。@RoboRobok谢谢,这对我来说更容易理解了,不客气。如果愿意,您也可以向上投票:)或者欢迎使用堆栈溢出!请访问,采取的,看看什么和。做一些研究,搜索相关话题等;如果您遇到问题,请发布您的尝试,使用
[]
代码段编辑器记录输入和预期输出。感谢您选择我的答案,我实际上简化了一点,使用
every()
而不是
reduce()
。请看一看。@RoboRobok谢谢,这对我来说更容易理解了,不客气。如果您愿意,也可以向上投票:)