#javascript #arrays #string #foreach #split
#javascript #массивы #строка #foreach #разделить
Вопрос:
Мое задание — напечатать имена всех пользователей из набора данных, которые соответствуют определенной категории; однако набор данных представляет собой массив объектов, который предоставляет полное имя в виде строки, например:
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() и reduce() .
Последний фрагмент моего кода (для получения имен из массива объектов «DataSet») выглядит следующим образом:
var youngGoodMath = dataSet.filter(function(person){
return person.age < avgAge amp;amp; 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() , но пока не смог его взломать…
Комментарии:
1. Разбить на пробел, вернуть первый элемент…
return person.name.split(' ')[0]
2. Когда я впервые начал программировать, Джейн было около 23: D Спасибо, что сохранили их возраст, lol
Ответ №1:
Вы можете использовать Array.map() и String.split(), чтобы решить эту проблему. По сути, вам нужно сопоставить каждое fullname
с first name
, поэтому, используя split
by space
character для every fullname
, мы можем получить массив имен, и первым элементом этого массива будет the 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() с положительным регулярным выражением, т.е. Сопоставление начальной последовательности символов, за которыми следует a 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;}
Комментарии:
1. Однострочный:
input.map(x => x.split(' ')[0])
Ответ №2:
В вашей функции map попробуйте var names = person.name.split(» «); и верните имена[0];
Комментарии:
1. Вот и все! @charlietfl сказал то же самое, слегка перефразированное выше в комментариях: «Разбить на пробел, вернуть первый элемент… return person.name.split(‘ ‘)[0]» Оба отлично работают.
Ответ №3:
в случае, если вам разрешено использовать forEach
свойство, вы можете захотеть:
dataSet.forEach( function( x ) { console.log( x.name.match( /w /) "" ) } );
в противном случае вам придется научиться использовать while
цикл.