Как передать параметр в JavaScript найти функцию?

1

Hie,

У меня есть объект json, у которого есть поле id:

document = {
             id: 'some value',
             ...
           }

И список для хранения этих документов.

var list = [{document}, {document} ...]

Теперь я пытаюсь вызвать функцию javascript find() в списке, чтобы вернуть документ с определенным id как

list.find( document, id) => {
   if (document.id == id)
   return id
}

Но это не работает. Я проверил и обнаружил, что значение параметра id не является тем, что я передаю, но значением индекса документа в списке. Я попытался изменить имя, надеясь, что это ошибка с ключевым словом, но результат sae.

Итак, как передать пользовательский параметр функции find?

Теги:

3 ответа

2
Лучший ответ

Это метод обратного вызова, который позволяет ссылаться на переменные за пределами области обратного вызова.

Пример:

var id = 10;
var foundDoc = list.find((document) => document.id == id);

// alternative syntax
var foundDoc = list.find((document) => {
  return document.id == id;
});

В вашем примере find принимает предикат, который должен возвращать true/false, если есть совпадение. При первом обнаружении true (совпадения) этот элемент возвращается вызывающему.

  • 0
    Спасибо за вашу помощь. Это сработало.
  • 0
    @ sam23 - рад помочь.
1

Итак, как передать пользовательский параметр функции find?

Array.prototype.find принимает второй параметр thisArg. Вы можете использовать его для передачи пользовательских параметров следующим образом:

function finder(doc) {
   return doc.id === this.id;
}

let list = [{id: 1}, {id: 2}, {id: 3}];
let doc = list.find(finder, {id: 2});
console.log(doc);

Однако, если нет никакой конкретной потребности в такой надуманной установке, вам стоит пойти с гораздо более простым list.find(doc => doc.id === 2). Вы можете заменить hardcoded 2 на переменную, объявленную во внешней области, как показано в ответе Игоря.

0

Вы можете создать функцию, которая использует параметр, который вы хотите использовать, и возвращает функцию, используемую в качестве вашего обратного вызова поиска, например

function findCreator(id) {
   return (item) => item.id === id;
}

let items = [{id: 1}, {id: 2}, {id: 3}];
let matchedItem = items.find(findCreator(2));
console.log(matchedItem);

Это было бы идеально для тестирования, так как теперь вы можете протестировать обратный вызов отдельно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню