字符串和对象的underscore.js _.where

时间:2016-08-26 19:18:43

标签: javascript reactjs underscore.js

我想检查是否可以在对象列表中找到字符串。

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

3 个答案:

答案 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);
});