Javascript 使用 includes 过滤对象
Javascript filter object using includes
我正在尝试使用 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 );
});
我可能漏掉了一些非常明显的东西。
这是一个工作示例:
function isInRefList(value) {
let refList = [5, 44, 560];
return refList.includes(value); //returns boolean
}
var myarr = [12, 5, 8, 130, 44];
myarr = [12, 5, 8, 130, 44].filter(isInRefList);
console.log(myarr); //Prints filtered array
The goal is to reduce the array so that it only holds objects where kat_id=1615 or kat_id=1616. Or any other value that I have in value.verdier
.
如果 kat_id
值和 value.verdier
中的值都是 数字 或所有 字符串。那是因为 includes
在你传递给它的东西和你调用它的数组中的条目之间做了一个 ===
。所以 [1, 2, 3].includes("2")
是 false
,["1", "2", "3"].includes(2)
.
我假设你不会发布问题,如果它有效的话,所以我假设 kat_id
的值类型和 value.verdier
中的值类型不同— 其中一个是数字,另一个是字符串。
如果 kat_id
的值是字符串,value.verdier
的值是数字,那么在使用 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
的值为字符串,那么在使用includes
之前需要将kat_id
的数字转为字符串:
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);
如果值变化(一些kat_id
是字符串,其他是数字,and/or一些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);
我正在尝试使用 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 );
});
我可能漏掉了一些非常明显的东西。
这是一个工作示例:
function isInRefList(value) {
let refList = [5, 44, 560];
return refList.includes(value); //returns boolean
}
var myarr = [12, 5, 8, 130, 44];
myarr = [12, 5, 8, 130, 44].filter(isInRefList);
console.log(myarr); //Prints filtered array
The goal is to reduce the array so that it only holds objects where kat_id=1615 or kat_id=1616. Or any other value that I have in
value.verdier
.
如果 kat_id
值和 value.verdier
中的值都是 数字 或所有 字符串。那是因为 includes
在你传递给它的东西和你调用它的数组中的条目之间做了一个 ===
。所以 [1, 2, 3].includes("2")
是 false
,["1", "2", "3"].includes(2)
.
我假设你不会发布问题,如果它有效的话,所以我假设 kat_id
的值类型和 value.verdier
中的值类型不同— 其中一个是数字,另一个是字符串。
如果 kat_id
的值是字符串,value.verdier
的值是数字,那么在使用 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
的值为字符串,那么在使用includes
之前需要将kat_id
的数字转为字符串:
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);
如果值变化(一些kat_id
是字符串,其他是数字,and/or一些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);