javascript - 使用单键 = 单值和单键 = 多值在数组中过滤数组
问题描述
const personData = {
personID: 1234567,
personList: [{
name: ['name1', 'name2'],
address: false,
pin: 12345
},
{
name: ['name1', 'name2', 'name3'],
address: true,
pin: 45678
},
{
name: ['name1'],
address: false,
pin: 12345
},
]
};
const keys = ['name', 'address', 'pin']
const values = ['name1', 'name2', false, 12345]
let personDataArr = personData.personList.filter(function(e) {
return keys.every(function(a) {
return e[a] &&
e[a].length > 0 ? values.every(x => e[a].includes(x)) : values.includes(e[a])
});
});
console.log(personDataArr);
该代码显示了人员数据对象,其中包括姓名、地址和密码等信息。
我尝试使用filter
,但没有得到正确过滤的结果。
我正在执行我得到 null 的代码,但我期待第一人称 List 对象。
有人可以查看代码并在可能的情况下进行修改,然后将预期结果作为输出发送给我。
解决方案
我会建议你把你的key value
作为一个object
而不是两个不同的数组
const {personList} = {personID: 1234567,personList: [{name: ['name1', 'name2'],address: false,pin: 12345},{name: ['name1', 'name2', 'name3'],address: true,pin: 45678},{name: ['name1'],address: false,pin: 12345},]};
const filterBy = { name:['name1', 'name2'],address: false,pin:12345 }
let personDataArr = personList.filter(e => {
return Object.keys(e).every(key => {
return Array.isArray(e[key]) ? filterBy[key].every(value=> e[key].includes(value))
: e[key] === filterBy[key]
})
})
console.log(personDataArr);
推荐阅读
- android - 颤振和android gradle错误:任务':app:checkDebugDuplicateClasses'的执行失败
- javascript - 在矩阵中以逐步方式对对象进行排队的算法?
- c - CMake 生成链接器不喜欢的 Makefile
- javascript - 如何使用javascript以特定模式提取矩阵的元素?
- msal - 如何使用 Azure AD B2C 保护 Web API
- c - O2 优化标志在 C 中编译时对堆栈帧有什么作用?
- javascript - 使用从 json 数据读取的循环创建多个 javascript 对象
- google-chrome-extension - 使用 var socket = chrome.sockets.tcpServer; 在 chrome 扩展中
- linux - VS Code SSH 远程连接问题
- javascript - Woocommerce 产品个人弹出窗口(简码)