如何在数组中查找元素

时间:2017-01-31 22:26:31

标签: javascript

我是javascript的新手,我有一个对象数组。

var cart = [
  { id: 1, price: 2 },
  { id: 2, price: 1 }
];

我正在使用for循环查找ID:

for (var i = 0; i < cart.length; i++) {
  if (cart[i].id === id) {
    return cart[i]
  }
}

return null;

我知道find()之类的功能,但我不太清楚如何使用它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

使用find,您可能需要babel,但只需要您需要的代码:

ES6

const id = 1;
const found = cart.find(item => item.id === id)

Vanilla

var id = 1;
var found = cart.find(function(item) {return item.id === id})

find接受一个函数(在我们的情况下使用es6:() => {}是一个匿名函数),并将其应用于列表中的每个项目,直到找到第一个匹配项,它是如何知道的当它匹配时:一旦你的函数返回true,它就会切断循环,并返回该项。

<强>无论其

另一个选项,它不使用find但可能比传统的for循环更具可读性:

var id = 1;
for(var item in cart) {
  if(item.id == id) {
    return item;
  }
}
return null

还有一些图书馆可以帮助你以不同的方式实现这一目标,例如:underscore.jslodash,我不会介绍,但你可以看看是否你真的很感兴趣。

答案 1 :(得分:4)

你是对的。有一个名为find的函数。您可以将回调函数设置为与find一起使用,甚至可以将其设置为接受参数(例如id):

&#13;
&#13;
var cart = [{
  id: 1,
  price: 2
}, {
  id: 2,
  price: 1
}];

function byID(id) {
  return function(element) {
    return element.id == id;
  }
}

var item = cart.find(byID(2));

console.log(item);
&#13;
&#13;
&#13;

对于这样的问题,我非常感谢图书馆lodash。它允许你做这样的事情:

&#13;
&#13;
var cart = [{id: 1, price: 5}, {id: 2, price: 6}];

var item = _.find(cart, {id:2});

console.log(item);
&#13;
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;