javascript - 如何通过另一个对象数组过滤对象数组

标签 javascript arrays object ecmascript-6

我需要在不知道 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/

相关文章:

javascript - amcharts touch&pan 事件仅在焦点后起作用

sql - DISTINCT 有两个 array_agg(或一个 array_agg 里面有元组)?

javascript - 将信息从表单值推送到对象不起作用

javascript - 有没有办法使用命名箭头函数来维护对象内的词法范围?

javascript - 双向绑定(bind)的编码值

javascript - 当网站打开两个选项卡时,您能分辨出哪个选项卡处于事件状态吗?

javascript - 使用 Javascript 从 Selenium::Remote::Driver 包恢复 Windows "Confirm Box"

arrays - 如何更有效地将词汇存储在数组中?

arrays - Delphi中数组和压缩数组有什么区别?

javascript - 在 javascript 中使用下拉选择值过滤列表