我正在尝试创建一个搜索/筛选函数,该函数允许用户过滤一个JS对象数组,该数组返回一个填充了匹配搜索查询的数据的数组。
我希望能够在一个查询中搜索多个属性,例如,如果我搜索HKG,它将返回所有3个对象,但是如果我搜索了HKG 12345,它将返回数组中的第一个对象。
另一个例子是,如果我要搜索8,它将从sumOfContainers属性返回数组中的前2个对象,与查询匹配,但如果我搜索了8 SAV,它将只返回第一个对象。
results = [];
objects = [
{laneId:"12345", lane:"HKG-SAV", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
{laneId:"12346", lane:"HKG-FRA", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
{laneId:"12347", lane:"HKG-LAX", equipmentType:"20'STD", sumOfContainers: "9", baseline:"$1234", new:"$1234", newSaving:"$1234"},
];
const Search = (toSearch) => {
for(var i=0; i<objects.length; i++) {
for(key in objects[i]) {
if(objects[i][key].indexOf(toSearch)!=-1) {
results.push(objects[i]);
}
}
}
}我的尝试的问题是它将返回重复的数据。我在网上看到了很多帖子,但我发现很难找到类似结果的帖子。
我正试图通过本机JavaScript来实现这一点。
发布于 2021-11-01 22:23:56
如果你不介意的话
const _ = require('lodash');
const objects = [
{laneId:"12345", lane:"HKG-SAV", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
{laneId:"12346", lane:"HKG-FRA", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
{laneId:"12347", lane:"HKG-LAX", equipmentType:"20'STD", sumOfContainers: "9", baseline:"$1234", new:"$1234", newSaving:"$1234"},
];
const mySearch = (arr, text) => {
const includesValue = (word, obj) => _.some(obj, (value) => _.includes(value, word));
const words = _.words(text);
return arr
.filter((obj) =>
words.every((word) =>
includesValue(word, obj)
)
);
};
console.log(mySearch(objects, 'HKG 12345'));
// [{laneId: '12345', lane: 'HKG-SAV', equipmentType: "20'STD", sumOfContainers: '8', baseline: '$1234', new: '$1234', newSaving: '$1234' }]
console.log(mySearch(objects, '8'));
// [
// {laneId:"12345", lane:"HKG-SAV", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
// {laneId:"12346", lane:"HKG-FRA", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
// ]
console.log(mySearch(objects, '8 SAV'));
// [{laneId: '12345', lane: 'HKG-SAV', equipmentType: "20'STD", sumOfContainers: '8', baseline: '$1234', new: '$1234', newSaving: '$1234' }]https://stackoverflow.com/questions/69801600
复制相似问题