我试图过滤一个包含数组的JS对象。我想检查id
、matchcode
和description
。我试过的是:
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)