使用filter()按子列表中的值过滤计算列表

时间:2018-04-09 18:57:16

标签: javascript arrays vue.js vuejs2

我有一个计算列表,需要根据搜索字符串(如果存在)进行排序..

我正在尝试使用filter()来解决这个问题,但我失败了......有人可以看一下吗?

示例场景: 用户搜索“fryseren”。 this.searchtext =“fryseren”。应过滤掉JSON中的第二个元素。

计算属性

nluData() {
        return orderby(this.$store.getters.nlujson.filter(item => {
            if (this.searchtext != "") {
                let searchstring = this.searchtext;
                return item.entities.filter(function(sub) {
                    sub.value.toLowerCase() === searchstring.toLowerCase()
                })
            }
            else {
                return item.intent.toLowerCase() === this.selectedIntent.toLowerCase()
            }

        }), ['justCreated', 'intent', 'text'], ['asc', 'asc', 'asc'])

    },

示例JSON(

{
        "id": "fb18eee6-423e-475d-9077-c03dd4ffd80f",
        "text": "Hvor lang holdbarhet har kyllingfilet i fryseren?",
        "intent": "shelf_life",
        "entities": [
            {
                "start": 25,
                "end": 37,
                "value": "kyllingfilet",
                "entity": "ingredient"
            },
            {
                "start": 40,
                "end": 48,
                "value": "fryseren",
                "entity": "ingredient_placement"
            },
            {
                "start": 10,
                "end": 20,
                "value": "holdbarhet",
                "entity": "shelf_life"
            }
        ],
        "isSociety": false
    },
{
        "id": "1072392a-38dc-43f2-affe-74a4fde81bfd",
        "text": "Hvor lang holdbarhet har ribbe i kjøleskapet? ",
        "intent": "shelf_life",
        "entities": [
            {
                "start": 33,
                "end": 44,
                "value": "kjøleskapet",
                "entity": "ingredient_placement"
            },
            {
                "start": 10,
                "end": 20,
                "value": "holdbarhet",
                "entity": "shelf_life"
            },
            {
                "start": 25,
                "end": 30,
                "value": "ribbe",
                "entity": "ingredient"
            }
        ],
        "isSociety": false
    },

1 个答案:

答案 0 :(得分:2)

您的内部过滤器功能不会返回任何内容,因此它始终为false。在此行添加回报。

return sub.value.toLowerCase() === searchstring.toLowerCase()