我有以下数据:
const myArr = [{
id: 0,
company: "microsoft",
location: "berlin"
}, {
id: 1,
company: "google",
location: "london"
}, {
id: 2,
company: "twitter",
location: "berlin"
}];
let myObj = {
company: ["google", "twitter"],
location: ["london"]
}
鉴于 myObj.company
条目正在发生变化(与如何变化无关),我正在尝试创建一个函数来过滤结果并仅返回满足 location
和公司
标准。
在上面的例子中,我们需要返回的是:
{
id: 1,
company: "google",
location: "london"
}
如果 myObj
是
let myObj = {
company: ["google", "twitter"],
location: []
}
那么返回的结果应该是
{
id: 1,
company: "google",
location: "london"
},
{
id: 2,
company: "twitter",
location: "berlin"
}
最佳答案
使用Array#filter
使用 Array#includes
的方法方法(旧浏览器支持使用Array#indexOf
方法)
myArr.filter(o => (myObj.company.length == 0 || myObj.company.includes(o.company)) && (myObj.location.length == 0 || myObj.location.includes(o.location)))
const myArr = [{
id: 0,
company: "microsoft",
location: "berlin"
}, {
id: 1,
company: "google",
location: "london"
}, {
id: 2,
company: "twitter",
location: "berlin"
}];
let myObj = {
company: ["google", "twitter"],
location: ["london"]
}
console.log(
myArr.filter(o => (myObj.company.length == 0 || myObj.company.includes(o.company)) && (myObj.location.length == 0 || myObj.location.includes(o.location)))
)
myObj = {
company: ["google", "twitter"],
location: []
}
console.log(
myArr.filter(o => (myObj.company.length == 0 || myObj.company.includes(o.company)) && (myObj.location.length == 0 || myObj.location.includes(o.location)))
)
更新:如果有 n 个属性集合,那么您需要做一些变化,您可以在其中使用 Object.keys
和 Array#every
方法。
var keys = Object.keys(myObj);
myArr.filter(o => keys.every(k => myObj[k].length == 0 || myObj[k].includes(o[k])))
const myArr = [{
id: 0,
company: "microsoft",
location: "berlin"
}, {
id: 1,
company: "google",
location: "london"
}, {
id: 2,
company: "twitter",
location: "berlin"
}];
let myObj = {
company: ["google", "twitter"],
location: ["london"]
}
var keys = Object.keys(myObj);
console.log(
myArr.filter(o => keys.every(k => myObj[k].length == 0 || myObj[k].includes(o[k])))
)
myObj = {
company: ["google", "twitter"],
location: []
}
keys = Object.keys(myObj);
console.log(
myArr.filter(o => keys.every(k => myObj[k].length == 0 || myObj[k].includes(o[k])))
)
关于javascript - 将对象数组的所有值与对象进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42164688/