我需要在不知道 criterias
数组中确切属性的情况下,通过另一个对象数组来过滤对象数组。让我们看一下示例以便更好地理解。
这是我需要过滤的数组
const dataset = [
{
id: "4",
someval1: "10",
someval2: "20",
someval3: "30",
someval4: "40"
},
{
id: "10",
someval1: "10",
someval2: "20",
someval3: "30",
someval4: "40"
},
{
id: "22",
someval1: "102",
someval2: "202",
someval3: "302",
someval4: "40"
}];
这是一个数组,它的值应该是第一个数组的过滤条件
const criterias = [{ someval1: "10" }, { someval3: "30" }, { someval4: "40" }];
因此,每当 dataset
中的对象包含来自 criterias
的所有值时,我都想保留他。问题是我希望数据集中的对象按所有相同的 条件
进行过滤。
到目前为止,我能够得到这个脚本,它可以正确地过滤 dataset
,但只能通过一个 criteria
。因此,从过滤后的给定数组中,我应该只从 dataset
中获取前两个对象,第三个对象不会包含所有 criterias
。
这是我当前的脚本
const dataset = [
{
id: "4",
someval1: "10",
someval2: "20",
someval3: "30",
someval4: "40"
},
{
id: "10",
someval1: "10",
someval2: "20",
someval3: "30",
someval4: "40"
},
{
id: "22",
someval1: "102",
someval2: "202",
someval3: "302",
someval4: "40"
}];
const criterias = [{ someval1: "10" }, { someval3: "30" }, { someval4: "40" }];
const filter = dataset.filter(item => criterias.some(criteria => Object.keys(criteria).some(prop => item[prop] != criteria[prop])));
console.log(filter)
最佳答案
您可以获得压缩对象的条目并使用 Array#every
并使用值检查属性。
var dataset = [{ id: "4", someval1: "10", someval2: "20", someval3: "30", someval4: "40" }, { id: "10", someval1: "10", someval2: "20", someval3: "30", someval4: "40" }, { id: "22", someval1: "102", someval2: "202", someval3: "302", someval4: "40" }],
criterias = [{ someval1: "10" }, { someval3: "30" }, { someval4: "40" }],
filters = Object.entries(Object.assign({}, ...criterias)),
result = dataset.filter(o => filters.every(([k, v]) => o[k] === v));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 如何通过另一个对象数组过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58133504/