Вы ничего не return
ИНГ от вашей функции
function findIt(myArray,target) { // <--------------------┐
myArray.forEach(function (person) { // <--┐ |
if (person.name === target) { // | |
return person.zip; // returns this func ---┘ |
} // |
}); // |
// you need a return for this function --------------┘
}
В любом случае, даже если вы исправить это, ваша функция все еще может использовать немного работы. forEach
собирается перебирать весь набор данных, даже если он находит совпадение по первому элементу. forEach
- это неправильная вещь для использования здесь.
Действительно простая вещь, которую вы можете использовать, - Array.prototype.find
. Array.prototype.find
прекратит итерирование данных, как только будет найдено первое совпадение.
var myArray=[
{
"name":"Joe",
"zip":90210
},
{
"name":"Bill",
"zip":94109
}
]
const findIt = (data, target) => {
// use Array.prototype.find
let {zip} = myArray.find(({name})=> name === target) || {}
return zip
}
console.log(findIt(myArray, 'Joe'))
// => 90210
console.log(findIt(myArray, 'unmatched name'))
// => undefined
Но если вы предпочли бы реализовать функцию себя в качестве учебного упражнения, которые будут выглядеть следующим образом. Обратите внимание: этот код будет работать как Array.prototype.find
тем, что он вернется, как только будет найдено первое совпадение.
var myArray=[
{
"name":"Joe",
"zip":90210
},
{
"name":"Bill",
"zip":94109
}
]
// implement generic find
const find = f => ([x,...xs]) => {
if (x === undefined)
return undefined
else if (f(x))
return x
else
return find (f) (xs)
}
// implement your function using find
const findIt = (data, target) => {
let {zip} = find (({name})=> name === target) (data) || {}
return zip
}
console.log(findIt(myArray, 'Joe'))
// => 90210
console.log(findIt(myArray, 'unmatched name'))
// => undefined
Это разумный способ написать findIt
потому что вместо относительно себя пробегаем по списку данных, или возвращает соответствующий объект, он просто вызывает обобщенную функцию (find
), который могут быть повторно использованы многими другими функциями.
ES5
Как любезность, я обеспечиваю пре-ES6 кода выше
var myArray=[
{
"name":"Joe",
"zip":90210
},
{
"name":"Bill",
"zip":94109
}
]
// implement generic find
function find (f) {
return function(xs) {
if (xs[0] === undefined)
return undefined
else if (f(xs[0]))
return xs[0]
else
return find (f) (xs.slice(1))
}
}
// implement your function using find
function findIt (data, target) {
var p = find (function(x) { return x.name === target }) (data) || {}
return p.zip
}
console.log(findIt(myArray, 'Joe'))
// => 90210
console.log(findIt(myArray, 'unmatched name'))
// => undefined
Это не JSON. Нет такой вещи, как «объект JSON». JSON всегда является строкой. Всегда. У вас есть массив объектов. – naomik
Функция findIt не возвращает ничего, поэтому не определена в результате –
Используйте 'filter' (или' find', если вы используете ES6) вместо 'forEach'. – str