Как разбить строки внутри массива в JavaScript (чтобы получить имена из полных имен) - PullRequest
0 голосов
/ 08 апреля 2019

Мое задание - напечатать имена всех людей из набора данных, которые соответствуют определенной категории;однако набор данных представляет собой массив объектов, который предоставляет полное имя в виде строки, например:

var dataSet = [ 
    {
        "name": "John Doe",
        "age": 60,
        "math": 97,
        "english": 63,
        "yearsOfEducation": 4
    },
    {
        "name": "Jane Doe",
        "age": 55,
        "math": 72,
        "english": 96,
        "yearsOfEducation": 10
    }
]

Я не могу использовать встроенные функции любого типа массива, кроме filter (), map () иredu ().

Последний кусок моего кода (чтобы получить имена из массива объектов "dataSet") выглядит так:

var youngGoodMath = dataSet.filter(function(person){
    return person.age < avgAge && person.math > avgMath;
  });

  var yGMname = youngGoodMath.map(function (person){
    return person.name;
  });

console.log(yGMname);

, который производит массив строк, который выглядит как-токак:

["Jane Doe", "John Doe", "Harry Potter", "Hermione Granger"]

Мне нужно найти способ произвести:

["Jane", "John", "Harry", "Hermione"]

Я подозреваю, что ответ заключается в использовании .forEach и .Split (), но не смогвзломать его еще ...

Ответы [ 3 ]

2 голосов
/ 08 апреля 2019

Вы можете использовать Array.map () и String.split () , чтобы решить эту проблему.По сути, вам нужно сопоставить каждый fullname с first name, поэтому, используя split на space символ на каждом fullname, мы можем получить массив имен, и первым элементом этого массива будет first name.

const input = ["Jane Doe", "John Doe", "Harry Potter", "Hermione Granger"];

let res =  input.map(name =>
{
    [first, ...rest] = name.split(" ");
    return first;
});

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Другой альтернативой является использование String.match () с регулярным выражением positive lookahead , т. Е. Matchначальная последовательность символов, за которой следует space.

const input = ["Jane Doe", "John Doe", "Harry Potter", "Hermione Granger"];
let res =  input.map(name => name.match(/^.*(?=\s)/)[0]);
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
0 голосов
/ 08 апреля 2019

в случае, если вам разрешено использовать свойство forEach, вы можете:

dataSet.forEach( function( x ) { console.log( x.name.match( /\w+/)+"" ) } );

в противном случае вам придется научиться использовать цикл while.

0 голосов
/ 08 апреля 2019

В вашей функции карты попробуйте var names = person.name.split (""); и вернуть имена [0];

...