包含数组的JS Filter对象



我试图过滤一个包含数组的JS对象。我想检查idmatchcodedescription。我试过的是:

let search = articles.filter(function(item){
return (item.matchcode.includes(articleno) || item.description.includes(articleno) || item.id.includes(articleno))
})

这就是目标:

let articles = '[ {
"id": "35",
"matchcode": "KM Anteile  S",
"description": "KM Anteile  S ",
"unit": "STK",
"salesPrice": 0.7,
"stock": "HL-F",
"stockAmount": -3282
},
{
"id": "41",
"matchcode": "Arbeitszeit",
"description": "Arbeitszeit ",
"unit": "STD",
"salesPrice": 76.8,
"stock": "HL-F",
"stockAmount": 0.75
}, {
"id": "502019",
"matchcode": "Gummimuffe 100 mm",
"description": "Gummimuffe 100 mm ",
"unit": "STK",
"salesPrice": 9.8,
"stock": "HL-F",
"stockAmount": 15
}';

当我尝试它时,我得到了一个错误,即filter不是一个函数。

let articles = [ {
"id": "35",
"matchcode": "KM Anteile  S",
"description": "KM Anteile  S ",
"unit": "STK",
"salesPrice": 0.7,
"stock": "HL-F",
"stockAmount": -3282
},
{
"id": "41",
"matchcode": "Arbeitszeit",
"description": "Arbeitszeit ",
"unit": "STD",
"salesPrice": 76.8,
"stock": "HL-F",
"stockAmount": 0.75
}, {
"id": "502019",
"matchcode": "Gummimuffe 100 mm",
"description": "Gummimuffe 100 mm ",
"unit": "STK",
"salesPrice": 9.8,
"stock": "HL-F",
"stockAmount": 15
}];
let articleno = "Gummimuffe"
let search = articles.filter(function(item){
return (item.matchcode.includes(articleno) || item.description.includes(articleno) || item.id.includes(articleno))
})
console.log(search)

这是一个示例,您也可以将其应用于代码。

let arr = JSON.parse('[{"value":"This is object insided array"}]');
console.log(arr)

您需要用]关闭[,并且您有一个字符串,而不是对象数组。您也可以使用JSON.parse()。这将完成任务:

let articles = [{
"id": "35",
"matchcode": "KM Anteile  S",
"description": "KM Anteile  S ",
"unit": "STK",
"salesPrice": 0.7,
"stock": "HL-F",
"stockAmount": -3282
},
{
"id": "41",
"matchcode": "Arbeitszeit",
"description": "Arbeitszeit ",
"unit": "STD",
"salesPrice": 76.8,
"stock": "HL-F",
"stockAmount": 0.75
}, {
"id": "502019",
"matchcode": "Gummimuffe 100 mm",
"description": "Gummimuffe 100 mm ",
"unit": "STK",
"salesPrice": 9.8,
"stock": "HL-F",
"stockAmount": 15
}
];

另外一件事是.filter()返回一个新数组,同时保持原来的数组原样

因为articles是一个字符串,所以需要使用JSON.parse()、来解析它


注意:正如@Dai在这个问题的评论中提到的,includes()是区分大小写的,所以你可能想使用另一种方法来进行友好的搜索(不区分大小写(

我选择使用new RegExp(),而不是includes(),我使用match()

const articles = `[ {
"id": "35",
"matchcode": "KM Anteile  S",
"description": "KM Anteile  S ",
"unit": "STK",
"salesPrice": 0.7,
"stock": "HL-F",
"stockAmount": -3282
}, {
"id": "41",
"matchcode": "Arbeitszeit",
"description": "Arbeitszeit ",
"unit": "STD",
"salesPrice": 76.8,
"stock": "HL-F",
"stockAmount": 0.75
}, {
"id": "502019",
"matchcode": "Gummimuffe 100 mm",
"description": "Gummimuffe 100 mm ",
"unit": "STK",
"salesPrice": 9.8,
"stock": "HL-F",
"stockAmount": 15
}]
`;
const articlenenoFilter = "arbeitsze"
const articleneno = new RegExp(articlenenoFilter, "i")
const search = JSON.parse(articles).filter((item) => (item.matchcode.match(articleneno) || item.description.match(articleneno) || item.id.match(articleneno)))
console.log(search)

最新更新