从 Object 数组中,获取仅匹配键值的数组

Siv*_*han 5 javascript node.js express

假设我有一个对象数组:

var students = [{name: 'Nick',achievements: 158,points: 1473}, {name: 'Nick',achievements: '175',points: '16375'}, 
{name: 'Ramon',achievements: '55',points: '2025'}];
Run Code Online (Sandbox Code Playgroud)

我只想从数组中的名称 Nick 中提取点。

就像 if (name=='Nick),O/P 应该是 [1473,16375]

我试过:

var arrayPoints = students.map(function (el) { 
    if(el.name=='Nick'){
        return el.points
    }
});
Run Code Online (Sandbox Code Playgroud)

但它给了我 o/p:

console.log(arrayPoints)

[1473,16375,undefined] o/p
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 4

看看这些方法:


您可以采取两个步骤,一个用于过滤项目,另一个用于从中获取值。

const
    students = [{ name: 'Nick', achievements: 158, points: 1473 }, { name: 'Nick', achievements: '175', points: '16375' }, { name: 'Ramon', achievements: '55', points: '2025' }],
    arrayPoints = students
        .filter(student => student.name === 'Nick') 
        .map(student => student.points);

console.log(arrayPoints);
Run Code Online (Sandbox Code Playgroud)

如果Array#flatMap实现了,您可以采用单个循环和过滤器并返回一个值。

空数组没有项目,并且该数组是中性值,不会出现在结果数组中。

const
    students = [{ name: 'Nick', achievements: 158, points: 1473 }, { name: 'Nick', achievements: '175', points: '16375' }, { name: 'Ramon', achievements: '55', points: '2025' }],
    arrayPoints = students
        .flatMap(student => student.name === 'Nick'
            ? student.points
            : []
        );

console.log(arrayPoints);
Run Code Online (Sandbox Code Playgroud)