我想检查是否可以在对象列表中找到字符串。
this.props.value
有一个字符串“apple,peach”,this.state.list
是一个对象列表,其中每个对象都有一个键值对。我想看看this.state.list.name
中是否有“apple,peach”。
来自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 :(得分:1)
目前尚不清楚你想要什么。如果您想要列表中显示的对象列表(键值对),您可能应该执行以下操作:
newFruits = _.filter(this.state.list, o => _.contains(this.props.value, o.name))
否则,如果您只想要一份水果清单,可以执行以下操作:
newFruits = _.intersect(this.props.value, _.pluck(this.state.list, 'name'))
答案 1 :(得分:0)
您可以尝试这样的事情:
var newFruits=_.find(this.state.list, function (fruits) {return fruits === this.props.value })?fruits:"";
答案 2 :(得分:0)
您最好的方法是创建一系列搜索字词,并根据搜索字词中的项目名称过滤您的列表。见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);
});