在对象文字数组中查找成员

时间:2017-09-25 08:29:53

标签: javascript

是否可以在对象文字中找到属于项目数组的成员字段而不循环遍历整个数组?例如:

let items = [
   {
      id: "abc",
      name: "john"
   },
   {
      id: "def",
      name: "steve"
   },
   {
      id: "ghi"
      name: "bob"
   }
]

如果我想引用名称等于steve的数组元素,有没有办法获得它但没有遍历所有项目并检查名称成员?

3 个答案:

答案 0 :(得分:4)

如果没有显式循环,您可以使用Array#find函数从数组中获取对象。但无论如何,你需要在某些条件下进行比较以获得所需的条件。如果你不知道项目的索引,你需要遍历数组。您可以使用内置方法,而不是显式循环。



let items = [
   {
      id: "abc",
      name: "john"
   },
   {
      id: "def",
      name: "steve"
   },
   {
      id: "ghi",
      name: "bob"
   }
];

const obj = items.find(item => item.name === 'steve');
console.log(obj);




答案 1 :(得分:0)

  

是肯定的。我想要一个简单的方法,只给出名称返回索引

Array.findIndex这样做,但它仍然会迭代

let items = [
   {
      id: "abc",
      name: "john"
   },
   {
      id: "def",
      name: "steve"
   },
   {
      id: "ghi",
      name: "bob"
   }
]

var index = items.findIndex( item => item.name === 'steve' );

console.log(index)

答案 2 :(得分:0)

如果您经常需要从数组中按名称获取对象,则可以创建名称的地图 - > object(一次迭代),然后使用map获取对象:

const items = [
   {
      id: "abc",
      name: "john"
   },
   {
      id: "def",
      name: "steve"
   },
   {
      id: "ghi",
      name: "bob"
   }
];

const itemsMap = items.reduce((m, o) => m.set(o.name, o), new Map());

console.log(itemsMap.get('steve'));

console.log(itemsMap.get('bob'));