通过属性值查找Map中的元素

Vla*_*iuk 3 javascript ecmascript-6

我有一个对象地图:

const myMap = new Map() 

myMap.set(123, {
  name: 'Lorem',
  elements: {
    books: ['book#1', 'book#2', 'book#3']
  }
})

myMap.set(521, {
  name: 'Ipsum',
  elements: {
    books: ['book#42', 'book#13', 'book#42']
 }
})
Run Code Online (Sandbox Code Playgroud)

在某些时候,我需要在 Map 中找到一个元素,该元素包含book#42elements.books数组中。我怎样才能正确地做到这一点?

And*_*eas 7

您可以将 由 返回的迭代器转换Map.prototype.values()为实际数组(使用 spread ( ...) 语法或Array.from()),然后使用Array.prototype.find()

const myMap = new Map()

myMap.set(123, {
  name: 'Lorem',
  elements: {
    books: ['book#1', 'book#2', 'book#3']
  }
})

myMap.set(521, {
  name: 'Ipsum',
  elements: {
    books: ['book#42', 'book#13', 'book#42']
  }
})

const findWithSpread = function(map, book) {
  return [...map.values()].find(entry => entry.elements.books.includes(book));
  //return Array.from(map.values()).find(...);
}

const element = findWithSpread(myMap, "book#42");
console.log(element);
Run Code Online (Sandbox Code Playgroud)