2016-08-26 2 views
0

Я хочу проверить, можно ли найти строку в списке объектов.underscore.js _.where для строки и объектов

this.props.value имеет строку «apple, peach» и this.state.list - это список объектов, где каждый объект имеет пару с ключом. Я хочу посмотреть, найдено ли «яблоко, персик» в this.state.list.name.

Из документации по Underscore.js: _.where(list, properties), и я не думаю, что могу ввести строку как list. Как проверить, найден ли строка в списке объектов?

render() { 
    fruits = this.props.value # "apple, peach" 
    newFruits = _.where(this.props.value, this.state.list) # I want to see if "apple, peach" is found in the list of fruits in state, and if so, re-assign those values into newFruits 

    return (
     <div> 
      <p>{newFruits}</p> 
     </div> 
    ) 
} 
+0

Любой код, с которым вы работаете, который вы можете показать? –

+0

@MikeBrant, он был отредактирован. – patrickhuang94

ответ

1

Непонятно, что вы хотите. Если вы хотите получить список объектов (пару ключей значения), которая показывает в списке, вы, вероятно, необходимо сделать следующее:

newFruits = _.filter(this.state.list, o => _.contains(this.props.value, o.name)) 

В противном случае, если вы просто хотите получить список фруктов, вы можете сделать следующее :

newFruits = _.intersect(this.props.value, _.pluck(this.state.list, 'name')) 
+0

Извините, не уточнил достаточно четко. Мне нужен был список строк, и ваш второй подход был простым и элегантным. Благодаря! – patrickhuang94

0

Вы можете попробовать что-то вроде этого:

var newFruits=_.find(this.state.list, function (fruits) {return fruits === this.props.value })?fruits:"";

0

Ваш лучший подход заключается в создании массива терминов поиска и фильтрации списка вашу базу d о поиске имени элемента в рамках поисковых запросов. См. https://jsfiddle.net/92xore2x/

var fruits = 'apple, peach'; 
var list = [ 
    {name: 'apple', id: 0}, 
    {name: 'orange', id: 1}, 
    {name: 'peach', id: 2}, 
    {name: 'plum', id: 3} 
]; 

var fruitsArray = fruits.split(',').map(function(f) { return f.trim(); }); 

var results = _.filter(list, function(item) { 
    return _.contains(fruitsArray, item.name); 
}); 

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

  • Нет связанных вопросов^_^