使用 include 的 Javascript 过滤对象

2024-06-19

我正在尝试使用 javascript 中的 filter() 函数来过滤对象。

我想过滤这样的数组:[1615, 1616]。它在代码中被引用为 value.verdier。

数据集是一个大型数组,包含从 JSON 字符串解析的具有多个属性的对象。数组中的每个对象都有一个名为 kat_id 的属性。

目标是减少数组,使其仅保存 kat_id=1615 或 kat_id=1616 的对象。或者我在 value.verdier 中拥有的任何其他值。

我的代码是这样的:

dataset = dataset.filter(function (el) 
     {
        return value.verdier.includes(el.kat_id );
     });

我可能错过了一些非常明显的东西。


目标是减少数组,使其仅保存 kat_id=1615 或 kat_id=1616 的对象。或者我拥有的任何其他价值value.verdier.

您问题中的代码将执行此操作,如果kat_id值和中的值value.verdier都是numbers or all strings。那是因为includes does a ===在您传递给它的内容和您调用它的数组中的条目之间。所以[1, 2, 3].includes("2") is false, as is ["1", "2", "3"].includes(2).

不过,我假设如果它有效的话你不会发布这个问题,所以我假设值的类型kat_id以及值的类型value.verdier是不同的——其中一个是数字,另一个是字符串。

If the kat_id值是字符串并且value.verdier值是数字,您需要解析kat_id使用前先编号includes:

return value.verdier.includes(parseInt(el.kat_id, 10));

实例:

var value = {
    verdier: [1615, 1616]
};

var dataset = [
    {kat_id: "1", expected: "omit"},
    {kat_id: "2", expected: "omit"},
    {kat_id: "1615", expected: "retain"},
    {kat_id: "3", expected: "omit"},
    {kat_id: "1616", expected: "retain"},
    {kat_id: "4", expected: "omit"},
    {kat_id: "5", expected: "omit"},
];
dataset = dataset.filter(function (el) 
{
    return value.verdier.includes(parseInt(el.kat_id, 10));
});
console.log(dataset);

或者如果kat_id值是数字,并且value.verdier值是字符串,您需要转换kat_id使用前将数字转换为字符串includes:

return value.verdier.includes(String(el.kat_id));

实例:

var value = {
    verdier: ["1615", "1616"]
};

var dataset = [
    {kat_id: 1, expected: "omit"},
    {kat_id: 2, expected: "omit"},
    {kat_id: 1615, expected: "retain"},
    {kat_id: 3, expected: "omit"},
    {kat_id: 1616, expected: "retain"},
    {kat_id: 4, expected: "omit"},
    {kat_id: 5, expected: "omit"},
];
dataset = dataset.filter(function (el) 
{
    return value.verdier.includes(String(el.kat_id));
});
console.log(dataset);

如果值vary (some kat_ids 是字符串,其他是数字,和/或一些value.verdier值是字符串,其他是数字),您可能需要some而不是includes和类型不敏感的比较:

return value.verdier.some(function(val) { return String(val) === String(el.kat_id); });

实例:

var value = {
    verdier: [1615, "1616"]
};

var dataset = [
    {kat_id: "1", expected: "omit"},
    {kat_id: 2, expected: "omit"},
    {kat_id: "1615", expected: "retain"},
    {kat_id: "3", expected: "omit"},
    {kat_id: 1616, expected: "retain"},
    {kat_id: "4", expected: "omit"},
    {kat_id: 5, expected: "omit"},
];
dataset = dataset.filter(function (el) 
{
    return value.verdier.some(function(val) { return String(val) === String(el.kat_id); });
});
console.log(dataset);

我坚持使用上面的 ES5 级别代码,因为您的问题似乎仅使用 ES5 级别代码。但以下是使用 ES2015+ 的示例:

dataset = dataset.filter(el => value.verdier.includes(parseInt(el.kat_id, 10)));
const value = {
    verdier: [1615, 1616]
};

let dataset = [
    {kat_id: "1", expected: "omit"},
    {kat_id: "2", expected: "omit"},
    {kat_id: "1615", expected: "retain"},
    {kat_id: "3", expected: "omit"},
    {kat_id: "1616", expected: "retain"},
    {kat_id: "4", expected: "omit"},
    {kat_id: "5", expected: "omit"},
];
dataset = dataset.filter(el => value.verdier.includes(parseInt(el.kat_id, 10)));
console.log(dataset);
dataset = dataset.filter(el => value.verdier.includes(String(el.kat_id)));
const value = {
    verdier: ["1615", "1616"]
};

let dataset = [
    {kat_id: 1, expected: "omit"},
    {kat_id: 2, expected: "omit"},
    {kat_id: 1615, expected: "retain"},
    {kat_id: 3, expected: "omit"},
    {kat_id: 1616, expected: "retain"},
    {kat_id: 4, expected: "omit"},
    {kat_id: 5, expected: "omit"},
];
dataset = dataset.filter(el => value.verdier.includes(String(el.kat_id)));
console.log(dataset);
dataset = dataset.filter(el => value.verdier.some(val => String(val) === String(el.kat_id)));
const value = {
    verdier: [1615, "1616"]
};

let dataset = [
    {kat_id: "1", expected: "omit"},
    {kat_id: 2, expected: "omit"},
    {kat_id: "1615", expected: "retain"},
    {kat_id: "3", expected: "omit"},
    {kat_id: 1616, expected: "retain"},
    {kat_id: "4", expected: "omit"},
    {kat_id: 5, expected: "omit"},
];
dataset = dataset.filter(el => value.verdier.some(val => String(val) === String(el.kat_id)));
console.log(dataset);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 include 的 Javascript 过滤对象 的相关文章

随机推荐