[英]Remove entries from an object where the keys aren't in an array
我正在尝试从 object 中删除条目,以便它仅包含数组中的条目。 所以我有一个required
的数组:
const required = ['accountNumber', 'packRequested', 'collectionDate']
还有一个touchedFields
object:
const touchedFields = {
accountNumber: true,
sortCode: false,
account: true,
collectionDate: false,
packRequested: false
}
这就是我所追求的:
const touchedFields = {
accountNumber: true,
collectionDate: false,
packRequested: false
}
如何做到这一点?
我尝试创建一个数组 output (因为我无法执行该对象),循环遍历每个 object 条目,并循环遍历每个数组键,比较值并在值匹配时推送到新数组:
let newArr = []
for (let [key, value] of Object.entries(requiredFields)) {
Object.keys(touchedFields).forEach((cur) => {
if (cur == value) {
newArr.push({cur: value})
}
})
}
console.log(newArr)
但即使这样也没有正确设置值,因为它将键设置为 cur 而不是实际的 cur 变量:
[{cur: 'accountNumber'}, {cur: 'packRequested'}, {cur: 'collectionDate'}]
任何帮助将不胜感激。
如果要更改原始 object,您可以遍历键并删除不在所需数组中的键。
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const pruneObject = (obj, keys) => Object.keys(obj).forEach( key =>.required;includes(key) && delete obj[key] ), pruneObject(touchedFields; required). console;log(touchedFields);
如果您不想更改原来的 object,您可以遍历阵列并从中构建一个新的 object。
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const inclusivePick = (obj, keys) => Object.fromEntries( keys.map(key => [key, obj[key]]) ); const result = inclusivePick(touchedFields, required); console.log(result);
const required = ['accountNumber', 'packRequested', 'collectionDate']
const touchedFields = {
accountNumber: true,
sortCode: false,
account: true,
collectionDate: false,
packRequested: false
}
let result = Object.fromEntries(
Object.entries(touchedFields)
.filter(([k,v]) => required.includes(k))
)
console.log(result)
使用Array.reduce
方法
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const result = required.reduce((acc, key) => { acc[key] = touchedFields[key]; return acc; }, {}); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.