Dav*_*era 3 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"
}];
Run Code Online (Sandbox Code Playgroud)
这是一个数组,其值应该是第一个数组的过滤条件
const criterias = [{ someval1: "10" }, { someval3: "30" }, { someval4: "40" }];
Run Code Online (Sandbox Code Playgroud)
因此,只要其中的对象dataset包含criterias我想要保留的所有值。问题是我希望数据集中的所有对象都criterias被相等的对象过滤掉。
到目前为止,我能够获得此脚本,该脚本可以dataset正确过滤,但只能过滤一个criteria。因此,从给定的数组过滤后,我应该只从中获得前两个对象dataset,第三个对象并不能全部criterias。
这是我当前的脚本
dataset.filter(item => criterias.some(criteria => Object.keys(criteria).some(prop => item[prop] != criteria[prop])));
Run Code Online (Sandbox Code Playgroud)
感谢您提前提出的所有建议。
您可以获取压缩对象的条目,然后使用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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |