目标是减少数组,使其仅保存 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_id
s 是字符串,其他是数字,和/或一些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);