2017-01-31 3 views
3

Я действительно новичок в javascript, и у меня есть массив объектов.Как найти элемент в массиве

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

, и я использую для цикла, чтобы найти ID:

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

return null; 

Я знаю, что есть функции, как find(), но я не слишком уверен в том, как использовать это. Может ли кто-нибудь помочь?

ответ

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: () => {} является анонимной функцией) и применяет его к каждому элементу в списке, u ntil он находит первое совпадение, как он узнает, когда он является совпадением: как только ваша функция вернет true, тогда он обрезает цикл и возвращает элемент.

ОДНАКО

Другой вариант, который не использует найти, но может быть более удобным для чтения, чем традиционный цикл:

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

Есть также множество библиотек, что там может помочь вам это можно сделать по-разному, например: underscore.js, lodash, который я не буду накрывать, но вы можете взглянуть, если вы действительно заинтересованы.

4

Вы правы. Существует функция, называемая find. Вы можете настроить функцию обратного вызова для использования с find, и даже установить его принять параметр (например, как id):

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);

С вопросами, как это, я очень ценю библиотека lodash. Это позволяет делать такие вещи, как так:

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

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

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

Смежные вопросы